對於關注對 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 事件。