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