必须在 MDIParent 窗体上多次单击 "X" 才能关闭应用程序,每次单击都会关闭 MDIChild
Must click "X" on MDIParent form multiple times to close application, each click closes MDIChild
我已经开始制作 C# MDI 应用程序的原型,但 运行 遇到了问题。似乎当 MDIChild 在 MDIParent 中打开时,我必须多次点击 parent 上的关闭按钮才能关闭应用程序。每次单击关闭按钮都会关闭其中一个 MDIChildren。
我怀疑这与我的 MDIChildren 的基本表单的关闭方法有关。
private void _AssetFormBase_FormClosing(object sender, FormClosingEventArgs e)
{
if(sender != this.MdiParent)
{
e.Cancel = true;
this.Hide();
}
}
虽然我上面的技巧似乎不起作用。我假设当 MDIParents close 被调用时,它依次首先调用它的所有子 close 方法。因此,如果发件人是 parent,那么我不会取消和隐藏(以保留表单状态),而是允许任何正常发生的事情发生。
知道问题出在哪里吗?
发件人不是你想的那样。使用 e.CloseReason 代替,你会得到 CloseReason.MdiFormClosing。但是不要测试那个特定的值,你也不想阻止操作系统关闭。使用:
private void _AssetFormBase_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
this.Hide();
}
}
请注意,当您在自己的代码中调用 Close() 时,您也会得到 UserClosing。
我已经开始制作 C# MDI 应用程序的原型,但 运行 遇到了问题。似乎当 MDIChild 在 MDIParent 中打开时,我必须多次点击 parent 上的关闭按钮才能关闭应用程序。每次单击关闭按钮都会关闭其中一个 MDIChildren。
我怀疑这与我的 MDIChildren 的基本表单的关闭方法有关。
private void _AssetFormBase_FormClosing(object sender, FormClosingEventArgs e)
{
if(sender != this.MdiParent)
{
e.Cancel = true;
this.Hide();
}
}
虽然我上面的技巧似乎不起作用。我假设当 MDIParents close 被调用时,它依次首先调用它的所有子 close 方法。因此,如果发件人是 parent,那么我不会取消和隐藏(以保留表单状态),而是允许任何正常发生的事情发生。
知道问题出在哪里吗?
发件人不是你想的那样。使用 e.CloseReason 代替,你会得到 CloseReason.MdiFormClosing。但是不要测试那个特定的值,你也不想阻止操作系统关闭。使用:
private void _AssetFormBase_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
this.Hide();
}
}
请注意,当您在自己的代码中调用 Close() 时,您也会得到 UserClosing。