Gal*_*ian 71

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

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

  • 这是[Windows窗体中的事件顺序]的MSDN链接(http://msdn.microsoft.com/en-us/library/86faxx0d.aspx). (8认同)

SLa*_*aks 23

  • Load表单时已被初始化,其手柄已创建事件触发后,但在上映之前.

  • Shown事件触发后的第一次形式变得可见,当你打电话form.Show()(或form.Visible = true).
    如果您隐藏表单,然后再次显示,Shown将再次触发.(但Load不会)

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

  • 这不准确,仅显示一次. (4认同)
  • 根据[MSDN文档](http://msdn.microsoft.com/en-us/library/system.windows.forms.form.shown.aspx),`Shown`应该只触发一次.你打电话给'ShowDialog`之后,表格是不是关闭了(或者不管怎样,*不是*)?我觉得这可能是一个非典型场景,两次调用"ShowDialog". (3认同)
  • @Hans:错了.我刚尝试过.如果你两次调用`ShowDialog`,`显示'会两次触发. (2认同)
  • 嗯,不知道你在做什么.加载火灾两次.不处理对话通常是一个错误. (2认同)

mat*_*rix 13

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


Taj*_*100 7

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

Control.HandleCreated
Control.BindingContextChanged
Form.Load
Control.VisibleChanged
Form.Activated
Form.Shown
Run Code Online (Sandbox Code Playgroud)

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

Form.Closing
Form.FormClosing
Form.Closed
Form.FormClosed
Form.Deactivate
Run Code Online (Sandbox Code Playgroud)

重点和验证事件

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

Enter
GotFocus
Leave
Validating
Validated
LostFocus
Run Code Online (Sandbox Code Playgroud)

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

Enter
GotFocus
LostFocus
Leave
Validating
Validated
Run Code Online (Sandbox Code Playgroud)