编辑:这个方法实际上很好,我问过,然后找到解决方案.我在重载的ShowDialog()方法中添加了正确的调用(它不是一个重载,甚至是一个重写,但它的工作原理是一样的,我的新问题是底部的.
我有一个表单,您可以单击三个按钮之一.我已经为返回的结果定义了一个枚举.我想打电话:
MyFormResults res = MyForm.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();