2015-07-20 63 views
0

我已经开始对C#MDI应用程序进行原型设计并遇到问题。似乎MDIChild在MDIParent中打开时,我必须多次关闭父项关闭按钮才能关闭该应用程序。每关闭一个关闭按钮关闭其中一个MDIChildren。必须多次点击MDIParent表单上的“X”才能关闭应用程序,每次点击关闭MDIChild

我怀疑这与我的MDIChildren的基本形式的密切方法有关。

private void _AssetFormBase_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if(sender != this.MdiParent) 
    { 
     e.Cancel = true; 
     this.Hide(); 
    } 
} 

虽然我上面的技巧似乎并不奏效。我假设,当MDIParents被调用时,它首先调用其所有儿童的关闭方法。因此,如果发件人是父母,那么不是取消和隐藏(以保留表格状态),我不会这样做,并允许通常发生的任何事情。

任何想法可能是什么问题?

+0

'sender'很可能是'this'。你可以实现你自己的密切方法。 –

回答

2

发件人是不是你认为它是。改用e.CloseReason,你会得到CloseReason.MdiFormClosing。但是不要测试这个特定的值,你也不想阻止操作系统关闭。使用:

private void _AssetFormBase_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason == CloseReason.UserClosing) 
    { 
     e.Cancel = true; 
     this.Hide(); 
    } 
} 

请注意,当您在自己的代码中调用Close()时,您还将获得UserClosing。