在 Visual Studio 2012 中,为什么在项目加载时显示项目中的消息框?

In Visual Studio 2012 why is a message box in the project shown as the project loads?

在 Visual Studio 2012 年,我向 WinForms 用户控件的加载事件添加了一个消息框,如果用户控件未正确初始化(加载事件被触发时),该消息框将弹出。所有的检查都是查看用户控件中的几个成员变量是否为空。

用户控件与主应用程序位于不同的项目中,因为它将被多个应用程序使用。

预期的事件顺序是这样的: 在主应用程序中,有一个右键单击菜单,其中包含显示 window 的选项。 window 包含所引用的用户控件。当用户选择该菜单项时,它会创建 window 的实例,并通过初始化方法初始化 window,然后在用户控件中设置变量以对其进行初始化。然后调用 form.Activate 方法,然后调用包含用户控件的 window 的 ShowDialog() 和 Focus()。

这是问题所在: 当我在 Visual Studio 2012 中加载解决方案时,在加载解决方案时并且在显示任何代码之前,消息框有时会显示为 Visual Studio 本身的模态对话框。在我关闭消息框之前,解决方案不会继续加载。

此外,当我调试应用程序时有时会显示消息框,在显示应用程序的登录 window 后立即弹出。我似乎找不到在这两个实例中显示消息框的任何模式。

这非常令人费解,因为代码甚至没有执行,却显示了消息框。并且在应用程序启动期间显示消息框,即使没有选择右键菜单。

老实说,我什至不确定要提供什么信息才能得到答案。任何指向正确方向的信息都将不胜感激。

为了让像我这样的其他人可以看到这个问题的答案,Prix 和 Jonathon Reinhart 在我的问题的评论中提供了很好的答案。但为了完整起见,我只是总结一下。

一旦表单或用户控件准备就绪,就会触发加载事件。用户控件在应用程序启动时加载,因此它可以以任何形式使用,这就是 Prix 所说的。 MSDN 关于加载事件 "Occurs before a form is displayed for the first time." 显然这可能意味着即使在启动您的应用程序时,也不一定 正确 在显示之前。

换句话说,加载事件不是放置初始化检查的正确位置。

至于在 Visual Studio 中加载解决方案时显示的消息框,Jonathon Reinhart 在这里提供了关键。显然,visual studio 设计器界面使用加载事件在设计器中显示用户控件,因此当设计器加载您的用户控件时也会执行代码。

神秘化解除神秘化。谢谢 Prix 和乔纳森。这么简单的答案,但我确实被难住了。