是否可以超载Showdialog方法以进行表单并返回不同的结果?
-
04-10-2019 - |
题
编辑:此方法实际上效果很好,我问它,然后稍后找到解决方案。我在超载的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();
其他提示
尝试一下,它似乎对我有用:
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();
}
}
不,这是不可能的。通常的解决方法是将您的真实结果暴露为表格上的财产:
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
}
这 ShowDialog
方法不能被过度过度。不过,您可以做的是创建一种新方法,该方法既返回Showdialog结果和另一个值。
public ShowDialogResult ShowDialogWrappe(out MyFormResults result) {
var dialogRet = ShowDialog();
result = MyFormResults.Result1;
return dialogRet;
}
不隶属于 StackOverflow