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