2015-07-20 62 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。