关闭子对话框时,父对话框关闭

时间:2018-01-30 17:04:36

标签: c# winforms

我有一个使用ParentForm.ShowDialog()打开的表单。

在此表格中,我打电话:

using (var form = new ChildForm())
{
    var result = form.ShowDialog();

    if (result == DialogResult.OK)
    {
        this.Cancelled = false;
    }
}

当关闭子对话框时,我会出现奇怪的行为,父(调用)表单也会关闭。

为什么会发生这种情况?如何阻止它?

我有一个当前的解决方案,通过使用ParentForm_FormClosing事件和布尔值来阻止关闭父窗体,但感觉就像一个过于复杂的解决方案

1 个答案:

答案 0 :(得分:0)

当您将属性DialogResult设置为除DialogResult.None之外的任何内容时,将关闭以模态方式打开的表单。关闭模式窗体的常见做法是将一个或多个按钮的DialogResult属性设置为同一命名枚举的某个值。这样,当表单引擎看到对click事件处理程序的调用时,检查单击按钮的DialogResult的值,如果没有更改该值,则当click事件处理程序结束将该枚举值返回给呼叫者。

因此,您可能已复制/粘贴该按钮,保持原始DialogResult属性不变,单击该按钮将触发托管表单的关闭。

当然,在关闭托管表单之前,引擎会调用按钮单击事件,在该事件中打开模式对话框,这将暂停所有内容,直到您关闭子表单。此时代码退出click事件,表单引擎继续关闭父窗体,返回调用者按钮的DialogResult属性的值。

如果您不想自动关闭托管表单,则可以使用

在代码中设置表单的DialogResult
 this.DialogResult = DialogResult.None;

或更改按钮的DialogResult属性值