C# Windows Forms 事件处理顺序

事件引发的顺序对某些Windows 窗体应用来说十分重要。当某些事件需要特别处理时(如重绘窗体的某些部分),必须知道事件在运行时的确切引发顺序。下面就应用程序和控件的生命周期中的几个重要阶段的事件顺序进行详细讨论。

应用程序的启动和关闭

Form和Control类有一组和程序启动和关闭先关的事件。当Windows Forms程序启动时,主窗体的启动事件按以下顺序引发:

  • Control.HandleCreated
    为控件创建句柄时发生,在首次显示Control时会创建句柄。例如,如果创建的Control但其Visible属性设置为false,则HandleCreated不会引发,直到Visiable 设置为true才引发。
  • Control.BindingContextChanged
    BindingContext属性值改变时引发.
  • Form.Load
    Form首次显示时引发,可以通过该事件分配窗体使用的资源等任务。
  • Control.VisibleChanged
    Visible属性改变时引发。
  • Form.Activated
    当窗体激活时引发,当应用程序处于活动状态并且有多个Form,则活动的窗体时具有输入焦点的窗体。不可见的窗体不能成为活动窗体。激活form最简单的方法时单击它。
    在运行时激活Form,使用Activate方法。可以使用此事件处理一些任务,如根据form在未激活时对窗体数据所做的更改来更新窗体内容。
  • Form.Shown
    form首次显示时引发,而在随后的最小化、最大化、还原、隐藏或无效化和重新绘制都不会引发该事件

当Windows Forms程序关闭时,主窗体的关闭事件按以下顺序引发:

  • Form.Closing
  • Form.FormClosing
  • Form.Cloed
  • Form.FormClosed
  • Form.Deactivate

Application类的ApplicationExit事件在主窗体关闭事件之后引发。

聚焦和验证事件

当通过使用键盘(TAB,Shift+Tab等)、调用Select或SelectNextControl方法、或将ActiveControl属性设置为当前窗体等方法更改焦点时,Control类的聚焦事件按以下顺序发生:

  • Enter
  • GotFocus
  • Leave
  • Validating
  • Validated
  • LostFocus

当使用鼠标或通过调用Focus方法更改焦点时,Control类的聚焦事件发生顺序为:

  • Enter
  • GotFocus
  • Leave
  • Validting
  • Validated
原文地址:https://www.cnblogs.com/jiawei-whu/p/4334598.html