必须在 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。