在C#中调用ShowDialog(ParentForm)时会触发哪些事件

时间:2011-10-19 18:36:20

标签: c# winforms

简单的问题。我有一个MainForm和一个settingsForm。设置表单初始化一次,然后在每次用户单击按钮时显示。单击此按钮时,我需要它执行某些操作。

m_inputSettings.ShowDialog(this); //edit settings selected, so show that form

这是调用设置表单的MainForm,它做得很好。但是每次发生这种情况时我都需要SettingsForm做一些事情。目前,我无法弄清楚这个调用是否实际上触发了我可以设置处理程序的任何事件。它会触发事件吗?如果没有,是否有另一种方法可以告诉我的SettingsForm每次调用时都会做一些事情?

注意:在该行之后的mainform中的任何代码都不会在SettingsForm返回之前执行,但这是故意的。

感谢。

编辑:我希望我的表单做的事情之一是在发生这种情况时选择一个特定的控件,但似乎在表单完成加载所有内容之前这是不可能的。

4 个答案:

答案 0 :(得分:6)

您可以在设置表单中覆盖OnVisibleChanged方法。确保调用base.OnVisibleChanged但不要搞砸事件的任何潜在观察者(以及基类在该方法中可能做的任何事情。)

答案 1 :(得分:3)

FormShown事件 - 第一次显示表单时仅提升一次。 OnPaint / OnActivate - 每次激活表单时,即使您使用其他应用程序切换也会引发这些事件,这可能是您不想要的。 如果要更改表单可见性,则可以使用OnVisibleChanged 如果您要最小化表单,可以使用OnSizeChanged / OnLocationChanged事件。

如果不适合你,请创建一个公共属性,并在表单关闭/隐藏时设置为false,并在显示之前设置为true。 OnActivate,使用此属性执行任务。

答案 2 :(得分:1)

也许使用VisibleChanged事件。

答案 3 :(得分:1)

在您的表单中覆盖 OnShown() 事件这只会在表单打开后引发一次 OnVisibleChanged 的​​缺点是它也会在窗体关闭时引发。 On Paint , On Activate 和 OnEnter 将在表单显示给用户之前引发。