【问题标题】:How to detect that a modal form is opened from a child form? (C# & VS2017)如何检测从子表单打开的模态表单? (C# & VS2017)
【发布时间】:2020-07-18 21:49:39
【问题描述】:

也许这是一个愚蠢的问题,但我找不到解决方案。

我有一个包含多个子项的 MDI 表单。有一个我可以说是主要的。

为了检测主体不再使用并使用了另一个子表单,我使用了“离开”事件,效果很好。

问题是当从 mdi 表单中执行模态类型 (.ShowDialog()) 时,子表单中不会发生 Leave 事件。

欢迎对如何获得它提出任何建议或意见。

【问题讨论】:

  • 父表单在 ShowDialog() 执行时被阻止。也许this 可能会有所帮助。
  • @user3249244 ,请添加您的示例代码,并说明您的尝试。
  • @user3249244 我正在修改其他人前段时间所做的代码 在主子窗体中,有一个计时器尝试大约每 20 秒向服务器发送一个帧。我想要做的是,当代码传递到另一个表单时,这个计时器被停用。子表单之间很容易,因为“离开”事件可以正常工作,但是当 mdi 调用模态表单时,我不知道如何从“主”表单中检测到是否调用了模态表单。

标签: c# visual-studio modal-dialog focus parent-child


【解决方案1】:

您可以使用this 只使用在您的情况下的当前类 (main)。

【讨论】:

    【解决方案2】:

    我是这样解决的:

    从调用模态表单的 MDI 表单中,我搜索子表单,如果它是“主”表单,我调用一个与“主”的离开事件相同的公共函数形式:

    foreach (Form childform in this.MdiChildren)
    {
        if (childform.Name.Equals("MyMainForm"))
        {
            var formMain = (MyMainForm)childform;
            formMain.stopTimer();
        }
    }

    这可能是一个繁琐的解决方案,但它很实用。

    【讨论】:

    • 也许您可以将您的解决方案标记为答案,这样可以帮助其他人快速找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多