C# 是否可以重载表单的ShowDialog方法并返回不同的结果?
编辑:这个方法实际上非常有效,我问过它,后来找到了解决方案。我在重载的ShowDialog()方法中添加了正确的调用(它实际上不是重载,甚至不是重写,但它的工作原理是一样的。我的新问题是底部的问题 我有一个表单,您可以在其中单击三个按钮中的一个。我已为返回的结果定义了枚举。我要进行调用:C# 是否可以重载表单的ShowDialog方法并返回不同的结果?,c#,modal-dialog,overloading,dialogresult,C#,Modal Dialog,Overloading,Dialogresult,编辑:这个方法实际上非常有效,我问过它,后来找到了解决方案。我在重载的ShowDialog()方法中添加了正确的调用(它实际上不是重载,甚至不是重写,但它的工作原理是一样的。我的新问题是底部的问题 我有一个表单,您可以在其中单击三个按钮中的一个。我已为返回的结果定义了枚举。我要进行调用: MyFormResults res = MyForm.ShowDialog(); 我可以使用以下代码添加新的ShowDialog方法: public new MyFormResults 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();
无法覆盖
ShowDialog
方法。但您可以通过创建一个新方法来返回ShowDialog结果和另一个值
public ShowDialogResult ShowDialogWrappe(out MyFormResults result) {
var dialogRet = ShowDialog();
result = MyFormResults.Result1;
return dialogRet;
}
不,这是不可能的。通常的解决方法是将实际结果作为表单上的属性公开:
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
}
试试这个,它似乎对我有用:
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();
}
}
好的,很尴尬,但是有一个“base.ShowDialog()”,它工作得很好。我试过“this.base.ShowDialog()”。它工作得很好。