编辑:此方法实际上效果很好,我问它,然后稍后找到解决方案。我在超载的Showdialog()方法中添加了正确的调用(这不是超载甚至替代的加重,但它的工作也一样。我的新问题是底部的问题。

我有一个表格,您可以单击三个按钮之一。我为返回的结果定义了枚举。我想打电话:

MyFormResults res = MyForm.ShowDialog();

我可以在此代码中添加一个新的Showdialog方法:

public new MyFormResults ShowDialog()
{
    //Show modal dialog
    base.ShowDialog(); //This works and somehow I missed this

    return  myResult; //Form level variable (read on)
}

单击按钮时,我为结果设置了一个表单级变量:

MyFormResults myResult;

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?
}

//Same as above for the other results

我唯一缺少的是显示对话框(模式)然后返回结果的代码。没有 base.ShowDialog() 功能,我该怎么做?

编辑:有一个“ base.showdialog()”,它有效。这是我在这里的新问题:

另外,这是完成所有操作的最佳方法吗?

谢谢。

有帮助吗?

解决方案

编辑:更改功能不是一个好主意 ShowDialog(), ,人们期望它返回 DialogResult 并显示该表格,我建议下面的建议。因此,仍然允许 ShowDialog() 使用正常方式。

您可以在您的 MyForm, , 就像是 DoShowGetResult()

看起来像这样

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;
}

那你可以使用这个

MyFormsResult result = MyForm.DoShowGetResult();

其他提示

尝试一下,它似乎对我有用:

 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();
        }
    }

不,这是不可能的。通常的解决方法是将您的真实结果暴露为表格上的财产:

public MyFormResults MyResult
{
    get;
}

然后,您将设置此:

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?
}

而且通话代码通常看起来像这样:

if (form.ShowDialog == DialogResult.OK)
{
    //do something with form.MyResult
}

ShowDialog 方法不能被过度过度。不过,您可以做的是创建一种新方法,该方法既返回Showdialog结果和另一个值。

public ShowDialogResult ShowDialogWrappe(out MyFormResults result) { 
  var dialogRet = ShowDialog();
  result = MyFormResults.Result1;
  return dialogRet;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top