关闭对话框和子窗体并将结果传递给主窗体
Posted
技术标签:
【中文标题】关闭对话框和子窗体并将结果传递给主窗体【英文标题】:Close dialog box and child form and pass result to main form 【发布时间】:2018-05-05 03:23:23 【问题描述】:我有打开子窗体的 C# windows 窗体,其中有文本框、确定和取消按钮,
当用户单击“确定”时,我会检查与在文本框中输入的机器用户的连接。 如果连接正常,我想关闭子表单,如果没有,则显示 Yes\No 消息,询问用户是否仍要使用输入的机器名称。 如果答案是 Yes 关闭子表单,如果不是就关闭 Yes\No 问题。
在主窗体中,我正在检查子对话框 DialogResult 但似乎无法使其工作,因为 this.Close 传递 Cancel 结果。下面是主窗体中的代码:
DialogResult result = SetServer.ShowDialog();
if (result == DialogResult.OK)
// BLA
子窗体上的代码
if (!PingMachine(testmachine))
DialogResult dialogResult = MessageBox.Show(“No connection", "Check",
MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
btnOK.DialogResult = DialogResult.OK;
else
btnOK.DialogResult = DialogResult.No;
this.Close();
【问题讨论】:
不要在模态表单中使用 Close。只需将 this.DialogResult 属性设置为适当的值 你试过用 this.Hide();在关闭表格之前?它使您的子窗体隐藏并在关闭之前执行任何操作。如果您单击“否”,则可以仅 this.Show(); 【参考方案1】:改为设置子表单的结果:
DialogResult dialogResult = MessageBox.Show(“No connection", "Check", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
this.DialogResult = DialogResult.OK;
else
this.DialogResult = DialogResult.No;
设置模态表单的DialogResult也会自动关闭,所以不需要调用this.Close();
【讨论】:
【参考方案2】:我正在搜索其他内容,偶然发现了这篇文章。即使它已经快一年了,如果其他人来这篇文章,我想添加一些东西。
如果您只想在用户按下No
时关闭YesNo
对话框,那么您无需对No
选项的代码执行任何操作。默认情况下,无论按下哪个按钮,Windows 都会关闭YesNo
对话框,您只需要在按下每个按钮时硬核您想要执行的操作,但如果您根本不想执行任何操作,请不要什么都不写。
if (dialogResult == DialogResult.Yes)
this.DialogResult = DialogResult.OK;
// End your code here. If user press "No", then the question will automatically close with no actions being executed.
【讨论】:
以上是关于关闭对话框和子窗体并将结果传递给主窗体的主要内容,如果未能解决你的问题,请参考以下文章