Windows窗体中事件“Form.Load”,“Form.Shown”和“Form.Activated”的顺序

Form.Load , Form.Shown和Form.Activated事件之间有什么区别? 他们被解雇的顺序是什么?

而且, Form.Activate事件可以被多次触发。 例如,如果您从窗体中打开消息框,并且单击该消息框的任何button,然后返回到窗体,则会触发Form.Activate 。 其他任何对话框(如FileOpenDialog也是如此。

请参阅Windows窗体事件生命周期 :

  • 移动:表单移动时发生此事件。 虽然默认情况下,当一个表单被实例化并启动时,用户不会移动它,但是这个事件在Load事件发生之前被触发。
  • 加载:此事件发生在首次显示表单之前。
  • VisibleChanged:Visible属性值更改时发生此事件。
  • 已激活:当代码或用户激活表单时发生此事件。
  • 如图所示:无论何时第一次显示表格,都会发生此事件。
  • Paint:重绘控件时发生此事件。
  • 取消激活:当表单失去焦点并且不是活动表单时发生此事件。
  • closures:表单closures时发生此事件。
  • closures:表单closures时发生此事件。
  • Load事件在表单初始化后触发,在它的句柄被创build之后,但在它被显示之前。

  • 当您调用form.Show() (或form.Visible = true )时, Shown事件会在第一次显示窗体后触发。
    如果你隐藏你的表格,然后再次ShownShown将再次触发。 (但Load不会)

  • 当用户切换到您的表单时, Activate事件触发。
    如果用户切换到不同的程序(或表格),然后切换回您的表格, Activate将再次触发。

Form和Control类公开了一组与应用程序启动和closures相关的事件。 当Windows窗体应用程序启动时,主窗体的启动事件按以下顺序引发:

 Control.HandleCreated Control.BindingContextChanged Form.Load Control.VisibleChanged Form.Activated Form.Shown 

当应用程序closures时,主窗体的closures事件按以下顺序提出:

 Form.Closing Form.FormClosing Form.Closed Form.FormClosed Form.Deactivate 

重点和validation事件

当您通过使用键盘(TAB,SHIFT + TAB等),通过调用Select或SelectNextControl方法,或通过将ActiveControl属性设置为当前窗体来更改焦点时,Control类的焦点事件发生在以下订购:

 Enter GotFocus Leave Validating Validated LostFocus 

当您使用鼠标或通过调用Focus方法更改焦点时,Control类的焦点事件按以下顺序进行:

 Enter GotFocus LostFocus Leave Validating Validated 

顺序是Form.Load ,它初始化窗体并调用控件Form.Shown ,它将框架标记为可见的(即使在C ++中 ,这是在创build窗体之后完成的)和Form.Activated ,它给出论坛重点。