对于关注对 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 事件。