窗体的关闭事件
對于關注對 Windows 窗體應用程序中引發的每個事件按次序進行處理的開發人員來說,事件引發的順序特別重要。
當 Windows 窗體應用程序啟動時,主窗體的啟動事件按以下順序引發
1、System.Windows.Forms.Control.HandleCreated
在為控件創建句柄時發生
2、System.Windows.Forms.Control.BindingContextChanged
當 BindingContext 屬性的值更改時發生
注:每個 Windows 窗體至少有一個 BindingContext 對象,詳見MSDN
3、System.Windows.Forms.Form.Load
在第一次顯示窗體前發生
4、System.Windows.Forms.Control.VisibleChanged
在 Visible 屬性值更改時發生
注:如果通過編程修改或用戶交互更改 Visible 屬性,則將引發此事件
5、System.Windows.Forms.Form.Activated
當使用代碼激活或用戶激活窗體時發生
6、System.Windows.Forms.Form.Shown
只有在首次顯示窗體時才會引發 Shown 事件;隨后執行的最小化、最大化、還原、隱藏、顯示或無效化和重新繪制操作都不會引發該事件。
?
?
當應用程序關閉時,主窗體的關閉事件按以下順序引發:
1、System.Windows.Forms.Form.Closing
在關閉窗體時發生
注意:在 .NET Framework 版本 2.0 中,Closing 事件已過時,應改用 FormClosing 事件。
2、System.Windows.Forms.Form.FormClosing
在關閉窗體前發生,此時可以取消窗體的關閉。
3、System.Windows.Forms.Form.Closed
關閉窗體后發生
注意:在 .NET Framework 版本 2.0 中,Closed 事件已過時,應改用 FormClosed 事件。
4、System.Windows.Forms.Form.FormClosed
關閉窗體后發生
5、System.Windows.Forms.Form.Deactivate
當窗體失去焦點并不再是活動窗體時發生
注意:當調用 Application.Exit 方法以退出應用程序時,不引發 Form.Closed 和 Form.Closing 事件,但是會激發 Form.FormClosed 和 Form.FormClosing 事件。
FormClosing :
在窗體關閉時,FormClosing 事件發生。窗體關閉時,此事件會得到處理,從而釋放與此窗體關聯的所有資源。如果取消此事件,則該窗體保持打開狀態。若要取消窗體的關閉操作,請將傳遞給事件處理程序的 FormClosingEventArgs 的 Cancel 屬性設置為 true。
FormClosed:
在用戶或 Application 類的 Close 方法或 Exit 方法關閉窗體后,會發生 FormClosed 事件。
若要防止窗體關閉,請處理 FormClosing 事件,并將傳遞給事件處理程序的 CancelEventArgs 的 Cancel 屬性設置為 true??梢允褂么耸录绦幸恍┤蝿?#xff0c;如釋放窗體使用的資源,還可使用此事件保存輸入窗體中的信息或更新其父窗體。 當窗體顯示為模式對話框時,單擊“關閉”按鈕(窗體右上角帶 X 的按鈕)會隱藏窗體并將 DialogResult 屬性設置為 DialogResult.Cancel。通過在窗體的 FormClosing 事件的事件處理程序中設置 DialogResult 屬性,可以在用戶單擊“關閉”按鈕時重寫分配給 DialogResult 屬性的值。
如果窗體是多文檔界面 (MDI) 父窗體,則在引發 MDI 父窗體的 FormClosing 事件之前將引發所有 MDI 子窗體的 FormClosing 事件。同樣,在引發 MDI 父窗體的 FormClosed 事件之前,將引發所有 MDI 子窗體的 FormClosed 事件。取消 MDI 子窗體的 FormClosing 事件不能防止引發 MDI 父窗體的 FormClosing 事件。但是,取消該事件會將作為參數傳遞給父窗體的 FormClosingEventArgs 類的 Cancel 屬性設置成 false。要強制關閉所有 MDI 父窗體和子窗體,請將 MDI 父窗體中的 Cancel 屬性設置成 false。
?
?
窗體顯示為無模式對話框時,在close之后,此窗體的資源已釋放,不能再調用show方法使窗體可見。
窗體顯示為有模式對話框時,單擊?關閉?按鈕 (" X " 的按鈕在窗體的右上角) 會隱藏窗體并且DialogResult?屬性將設置為?DialogResult.Cancel。?當用戶單擊該對話框的關閉的窗體按鈕或設置?DialogResult?屬性的值時,??.NET framework不調用Close?方法,該窗體會隱藏并可重新顯示,而不必創建對話框的新實例。?由于作為對話框中顯示的窗體隱藏而未關閉,當窗體由應用程序時不再需要,必須調用該窗體的?Dispose?方法。
在以下兩種情況下調用?Close?不會釋放窗體:(1) 窗體是多文檔界面 (MDI) 應用程序的一部分且是不可見的;(2)該窗體是模式對話框。?在這些情況下,需要手動調用?Dispose?來將窗體的所有控件都標記為需要進行垃圾回收。
轉載于:https://www.cnblogs.com/w-y-f/archive/2012/04/10/2440552.html
總結
- 上一篇: hdu 1863(最小生成树kruska
- 下一篇: 在netbeans下使用调试PHP的插件