c# – 可以重载表单的ShowDialog方法并返回不同的结果吗?

前端之家收集整理的这篇文章主要介绍了c# – 可以重载表单的ShowDialog方法并返回不同的结果吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑:这个方法实际上很好,我问过,然后找到解决方案.我在重载的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();
原文链接:https://www.f2er.com/csharp/95822.html

猜你在找的C#相关文章