当前位置:  开发笔记 > 编程语言 > 正文

是否可以为表单重载ShowDialog方法并返回不同的结果?

如何解决《是否可以为表单重载ShowDialog方法并返回不同的结果?》经验,为你挑选了1个好方法。

编辑:这个方法实际上很好,我问它后来找到了解决方案.我在重载的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()',它的工作原理.这是我的新问题:

此外,这是完成所有这些的最佳方式吗?为什么?

谢谢.



1> PostMan..:

编辑:改变功能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();

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有