【问题标题】:Winforms - order of Load and Activated eventsWinforms - 加载和激活事件的顺序
【发布时间】:2010-11-28 16:37:58
【问题描述】:

我们的一位用户发送了我们的 .NET Winforms 应用程序的日志,表明 Activated 事件在Load 事件之前发生。我不认为这是可能的,并且假设Load 总是在Activated 之前发生。

有没有其他人观察到Activated 发生在Load 之前?

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

【问题讨论】:

  • @HansaA:+1。即使在我现有的一个 MDI 应用程序中,我也发现了这种行为。在 Fresh Winform 或 MDI 中,这不是问题。
  • 感谢 Mahin 和 Ash 抽出时间对此进行调查。看来您基本上无法对这两个事件的顺序做出任何假设。我意识到我可以将 Load 中的代码移动到从表单的构造函数调用的方法中,所以我认为我已经通过这种方式解决了我的问题。至于 Shown 事件:我们有一个 1.1 版本的应用程序,所以即使它是在 2.0 中引入的,我们也不能使用它。
  • @HansA :订单显然是Laod,Activated,Shown ...。但是当您遇到问题时,我也遇到了同样的问题。

标签: .net winforms events load


【解决方案1】:

在加载之前激活。如果你想编写一些应该在 Load 之后执行的代码,那么你可以使用 Shown Method。

请在下面找到顺序:

  • 已激活
  • 加载
  • 显示

编辑:请在 SO 上查看这个非常有趣的 answer,它解释了 WinForms 加载与显示事件

编辑:我现在创建了一个默认值 带有单个 winform 的 Winform 项目。 现在它给了我序列

  • 加载
  • 已激活
  • 显示

我现在很困惑。

【讨论】:

  • @Ash :我已经看到了 Ash 链接,但在我的 MDI 表单中,它显示了序列已激活、加载、显示......
  • @Mahin 我认为您应该在回答中明确说明这是您在 MDI 表单中看到的顺序,而不是将其声明为不合格的事实。
【解决方案2】:

来自 MSDN 的 Order of Events in Windows Forms

应用程序启动和关闭 活动

Form 和 Control 类公开了一个 与应用程序相关的事件集 启动和关闭。当一个窗口 表单应用程序启动,启动 主要形式的事件在 以下顺序:

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

您是否在任何启动事件中使用 MessageBox?由于 Windows 窗体消息循环处理对话框窗口的方式,这可能会导致事件似乎无序触发。

【讨论】:

  • @Ash : 我已经在 MDI 表单中检查了它,我的断点按顺序出现了 Activated,Load,Shown... 为什么会这样?
  • @Ash : 用 Fresh MDI 应用程序和简单的 winform 应用程序进行了验证。 MSDN 顺序是正确的。但在我之前使用 MDI 表单的应用程序之一中,它给了我与 HansaA 在这个问题中遇到的同样的问题。
【解决方案3】:

即使它违反了 Microsoft 的文档,当您从表单外部访问加载表单的公共变量或函数时,有时也会发生这种情况。如有必要,您可以在显示的事件中设置一个标志,并使用它在表单加载之前退出激活的处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2010-11-21
    • 2020-04-25
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多