关闭对话框和子窗体并将结果传递给主窗体

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.

【讨论】:

以上是关于关闭对话框和子窗体并将结果传递给主窗体的主要内容,如果未能解决你的问题,请参考以下文章

怎样在C#中实现父窗体向子窗体传值和子窗体向父窗体传值

C# Winform主窗体和子窗体之间如何相互操作对方的控件

新手求教WPF中如何设置打开子窗体后父窗体关闭或隐藏.

主窗体选项卡控件将值传递给选择案例的子窗体变量

在 CDialog 类型的子窗体之间传递数据

Access 2013 中 1:m 表的主窗体和子窗体