【问题标题】:What events are triggered when ShowDialog(ParentForm) is called in C#在 C# 中调用 ShowDialog(ParentForm) 时会触发哪些事件
【发布时间】:2021-02-09 16:01:41
【问题描述】:

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

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

这是调用设置表单的 MainForm,它运行良好。但是每次发生这种情况时,我都需要 SettingsForm 做一些事情。目前,我无法弄清楚这个调用是否真的触发了我可以为其设置处理程序的任何事件。它会触发事件吗?如果没有,是否有另一种方法可以让我的 SettingsForm 在每次调用时执行某些操作?

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

谢谢。

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

【问题讨论】:

标签: c# winforms


【解决方案1】:

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

【讨论】:

  • 在覆盖的开头还是结尾调用基方法更好?
【解决方案2】:

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

如果没有适合您的,请创建一个公共属性并在表单关闭/隐藏时设置为 false,并在显示之前设置为 true。 OnActivate,使用这个属性来完成你的任务。

【讨论】:

    【解决方案3】:

    也许使用 VisibleChanged 事件。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2011-07-12
        • 2012-12-13
        • 2015-08-13
        • 2015-02-08
        • 1970-01-01
        • 2015-02-13
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        相关资源
        最近更新 更多