2011-05-30 39 views
7

如何檢測所有者窗體何時關閉(從其內部的控件)?如何檢測所有者窗體何時從內部控件關閉?

UPD我需要控制要知道,它的形式被關閉,不是相反

+0

你檢查表單上的Closing事件? – MBen 2011-05-30 10:35:46

+0

將活動添加到子窗體並在父窗體關閉時增加它 – Reniuz 2011-05-30 10:35:50

+0

您的問題對我來說有點不清楚。你是否希望a)表單由於在控件內部採取了某些行動而知道它正在關閉,或者b)控件知道表單正在關閉?當然,b)當然是@FredrikMörk, – 2011-05-30 10:48:39

回答

13

貸記的Fredrik MORK對於此解決方案:

FindForm().FormClosing += parentForm_FormClosing; 
+4

您可以使用[Control.FindForm](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.findform.aspx)方法代替循環。 – 2011-05-30 10:49:42

+0

@FredrikMörk - 哇,我不知道這個方法,更新了答案。如果您創建了自己的答案,我會刪除我的答案。我認爲這是公平的。 – 2011-05-30 10:53:16

+0

該方法不容易找到,因爲它的命名很糟糕(至少在我看來)。關於答案,只要讓它留下。這是一個社區的努力,對吧? :-) – 2011-05-30 10:55:54

3

你應該攔截的FormClosing事件。在FormClosingEventArgs中,變量CloseReason會告訴你爲什麼表單關閉。您最好的選擇是攔截這個變量等於UserClosing枚舉值。

+1

沒有FormClosing _inside control_ – user626528 2011-05-30 10:40:32

+1

@ user626528:no,但控件仍然可以將事件處理程序附加到父窗體的FormClosing事件。 – 2011-05-30 10:50:40

+0

隨着OP的新更新,我認爲FredrikMörk和Alex Aza的答案更完整。 – 2011-05-30 11:06:19

0

形式所有者關閉是當一個形式是通過其能夠封閉當父窗體關閉窗體或窗體關閉另一個母體形式封閉。

使用窗體關閉事件,以檢查是否另一種形式的封閉形式:

private void AppMainForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if(e.CloseReason == CloseReason.FormOwnerClosing) 
    { 
     // do something 
    } 
    else 
    { 
     // do nothing 
    } 
} 
相關問題