Is it possible to overload the ShowDialog method for forms and return a different result?

前端 未结 4 2469
渐次进展
渐次进展 2021-02-20 06:04

EDIT: This method actually works great and I asked it then found the solution later. I added the correct call in the overloaded ShowDialog() method (it\'s not exacly an over

相关标签:
4条回答
  • 2021-02-20 06:14

    Try this, it seems to work for me:

     public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            public DialogResult ShowDialog(string mes)
            {
                this.textBox1.Text = mes;
                return base.ShowDialog();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                this.Close();
            }
        }
    
    0 讨论(0)
  • 2021-02-20 06:16

    The ShowDialog method cannot be overriden. What you could do intead though is create a new method which returns both the ShowDialog result and another value.

    public ShowDialogResult ShowDialogWrappe(out MyFormResults result) { 
      var dialogRet = ShowDialog();
      result = MyFormResults.Result1;
      return dialogRet;
    }
    
    0 讨论(0)
  • 2021-02-20 06:18

    No, it's not possible. The usual workaround is to expose your real result as a property on the Form:

    public MyFormResults MyResult
    {
        get;
    }
    

    and you would then set this:

    private void btn1_click(object sender, EventArgs e)
    {
        MyResult = MyFormsResults.Result1;
        this.DialogResult = DialogResult.OK; //Do I need this for the original ShowDialog() call?
        this.Close(); //Should I close the dialog here or in my new ShowDialog() function?
    }
    

    and the calling code usually looks like this:

    if (form.ShowDialog == DialogResult.OK)
    {
        //do something with form.MyResult
    }
    
    0 讨论(0)
  • 2021-02-20 06:24

    Edit: It's proberly not a good idea to change the functionality of ShowDialog(), people expect it to return a DialogResult and show the form, I suggest something like my suggestion below. Thus, still allowing ShowDialog() to be used the normal manner.

    You could create a static method on your MyForm, something like DoShowGetResult()

    which would look something like this

    public static MyResultsForm DoShowGetResult()
    {
       var f = new MyForm();
       if(f.ShowDialog() == DialogResult.OK)
       {
          return f.Result;   // public property on your form of the result selected
       }
       return null;
    }
    

    then you can use this

    MyFormsResult result = MyForm.DoShowGetResult();
    
    0 讨论(0)
提交回复
热议问题