2009-07-24 86 views
0

我有一個表單(讓我們稱之爲父窗體),從中可以加載另一個「永遠在頂部但不是模態」窗體(就像一個對話框,但不是一個對話框 - 用戶可以離開新的「子窗體」並繼續在父窗體上工作)。如何確定表單是否已被用戶或代碼關閉?

第一次用戶打開該子窗體時會加載並顯示一些數據。如果他們關閉了表單,我實際上攔截了關閉並且簡單地隱藏了表單 - 所以下次他們打開表單時,我們不必重新加載數據(這不是數據變化非常大)。

if (e.CloseReason == CloseReason.UserClosing) 
{ 
    e.Cancel = true; 
    this.Hide(); 
} 

後來,當父窗體關閉,我想迫使子窗體正確關閉 - 在它的基本形式運行的一些代碼來存儲它的位置和大小的下一次。

當前我打電話childForm.Dispose()從很好地清理事情的父窗體,但不給我太多的控制。

但是,如果我調用childForm.Close()方法,e.CloseReason仍然是「CloseReason.UserClosing」。

是否有辦法區分用戶關閉窗體和我的代碼(在父窗體中)關閉它?

回答

2

只需添加一個特殊的「ReallyClose()」方法來完成清理工作,並在您確實要關閉表單時調用該方法。

+0

我希望能夠讓窗體的基本關閉事件運行。 我添加了一個ReallyClose事件,並調用base.Close()希望基類中的表單可以運行,但是當然,我的重寫關閉事件剛剛運行,表單又被隱藏了。這裏有難聞的氣味 - 可能需要改變我對這一切的想法。 – 2009-07-24 06:28:01

相關問題