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

时间:2010-06-18 13:53:06

标签: c# .net winforms events

表单Form.LoadForm.ShownForm.Activated事件之间有什么区别?他们被解雇的顺序是什么?

5 个答案:

答案 0 :(得分:67)

请参阅Windows Forms Events Lifecycle

  • 移动:移动表单时发生此事件。虽然默认情况下,在实例化并启动表单时,用户不会移动它,但在Load事件发生之前会触发此事件。
  • 加载:此事件在第一次显示表单之前发生。
  • VisibleChanged:当Visible属性值更改时会发生此事件。
  • 已激活:在代码或用户激活表单时会发生此事件。
  • 显示:只要首次显示表单,就会发生此事件。
  • Paint:重绘控件时会发生此事件。
  • 停用:当表单失去焦点且不是活动表单时,会发生此事件。
  • 结束:表单关闭时会发生此事件。
  • 已关闭:表单关闭时会发生此事件。

答案 1 :(得分:22)

  • 表单初始化后,Load事件在创建句柄之后但在显示之前触发。

  • 当您第一次看到表单后,当您致电Shown(或form.Show())时,form.Visible = true事件会触发。
    如果您隐藏表单,然后再次显示,Shown将再次触发。 (但Load不会)

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

答案 2 :(得分:13)

此外,Form.Activate事件可以多次触发。例如,如果您从表单中打开一个消息框,并且单击消息框的任何按钮,然后返回到表单,则会触发Form.Activate。任何其他对话框(例如FileOpenDialog

)也是如此

答案 3 :(得分:7)

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

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

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

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

焦点和验证事件

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

Enter
GotFocus
Leave
Validating
Validated
LostFocus

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

Enter
GotFocus
LostFocus
Leave
Validating
Validated

答案 4 :(得分:3)

订单为Form.Load,它会初始化表单并调用控件Form.Shown,这会将框架标记为可见(即使在C++中,这是在表单完成后完成的创建)和Form.Activated,这使论坛成为焦点。