的WinForms - 负载的秩序和激活事件(Winforms - order of Load a

2019-08-06 17:28发布

我们的一个用户在日志为我们的.NET WinForms应用程序,指示已发送Activated事件在发生之前 Load事件。 我不认为这是可能的,并已在假设编码Load会经常发生之前Activated

有没有其他人观察到Activated前发生的Load

如果是这样,为什么,有没有什么办法,以确保它不会发生?

Answer 1:

从Windows中活动的定货单在MSDN:

应用程序启动和关闭事件

该窗体和控件类公开了一组相关的应用程序启动和关闭事件。 当Windows窗体应用程序启动时,主要形式的启动引发事件的顺序如下:

System.Windows.Forms.Control.HandleCreated

System.Windows.Forms.Control.BindingContextChanged

System.Windows.Forms.Form.Load

System.Windows.Forms.Control.VisibleChanged

System.Windows.Forms.Form.Activated

System.Windows.Forms.Form.Shown

当应用程序关闭时,主要形式的关闭事件被触发以下列顺序:

System.Windows.Forms.Form.Closing

System.Windows.Forms.Form.FormClosing

System.Windows.Forms.Form.Closed

System.Windows.Forms.Form.FormClosed

System.Windows.Forms.Form.Deactivate

您是否使用您的任何启动事件的一个消息? 这可能会导致事件出现触发无序因为方式的Windows窗体消息循环来处理对话窗口。



Answer 2:

活性炭负载来之前。 如果你想写一个应该载入那么你可以使用的方法不同后执行一些代码。

请找到序列如下:

  • 活性
  • 加载
  • 显示

编辑:请检查这个非常有趣的答案在SO这也解释了的WinForms负荷对显示的事件

编辑:我现在已经创建了一个WinForm的一个默认的Winform项目。 现在,它给我的序列

  • 加载
  • 活性
  • 显示

我现在很困惑。



Answer 3:

尽管它违背了微软的文档,这可以当您从形式外部访问装载形式的公共变量或函数时有发生。 如果有必要,可以在显示事件设置一个标志,并用它的形式加载之前退出启动处理程序。



文章来源: Winforms - order of Load and Activated events