表单Form.Load,Form.Shown和Form.Activated事件之间有什么区别?他们被解雇的顺序是什么?
答案 0 :(得分:67)
请参阅Windows Forms Events Lifecycle:
答案 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
,这使论坛成为焦点。