我有一个使用ParentForm.ShowDialog()打开的表单。
在此表格中,我打电话:
using (var form = new ChildForm())
{
var result = form.ShowDialog();
if (result == DialogResult.OK)
{
this.Cancelled = false;
}
}
当关闭子对话框时,我会出现奇怪的行为,父(调用)表单也会关闭。
为什么会发生这种情况?如何阻止它?
我有一个当前的解决方案,通过使用ParentForm_FormClosing事件和布尔值来阻止关闭父窗体,但感觉就像一个过于复杂的解决方案
答案 0 :(得分:0)
当您将属性DialogResult设置为除DialogResult.None之外的任何内容时,将关闭以模态方式打开的表单。关闭模式窗体的常见做法是将一个或多个按钮的DialogResult属性设置为同一命名枚举的某个值。这样,当表单引擎看到对click事件处理程序的调用时,检查单击按钮的DialogResult的值,如果没有更改该值,则当click事件处理程序结束将该枚举值返回给呼叫者。
因此,您可能已复制/粘贴该按钮,保持原始DialogResult属性不变,单击该按钮将触发托管表单的关闭。
当然,在关闭托管表单之前,引擎会调用按钮单击事件,在该事件中打开模式对话框,这将暂停所有内容,直到您关闭子表单。此时代码退出click事件,表单引擎继续关闭父窗体,返回调用者按钮的DialogResult属性的值。
如果您不想自动关闭托管表单,则可以使用
在代码中设置表单的DialogResult this.DialogResult = DialogResult.None;
或更改按钮的DialogResult属性值