【问题标题】:Detect which of forms is really active?检测哪些表单是真正活跃的?
【发布时间】:2012-05-25 00:19:26
【问题描述】:

在我的应用程序中,用户可以打开多个表单。

有些表格是 MDI,有些不是。

如何以任意(MDI 或非 MDI)形式检测它是否是活动形式?

来自MSDN(Form.ActiveForm属性解释):

您可以使用此方法获取对当前活动的引用 表单对表单或其控件执行操作。如果你的 应用程序是一个多文档界面 (MDI) 应用程序,使用 ActiveMdiChild 属性获取当前活动的 MDI 子 表格。

我有两种可能,一种用于 MDI,另一种用于非 MDI,但是如果我同时打开了两种形式,我如何检测它们中的哪一种是真正活跃的?

【问题讨论】:

    标签: .net winforms


    【解决方案1】:

    你可以把这个逻辑放在你需要的地方:

            if (Form.ActiveForm == null) return;
    
            if (Form.ActiveForm == this.MdiParent)
            {
                if (MdiParent.ActiveMdiChild != null) 
                    Debug.WriteLine(MdiParent.ActiveMdiChild.Text);
    
                return;
            }
    
            Debug.WriteLine(Form.ActiveForm.Text);
    

    Form.ActiveFormreturn the non-MDI form 当前处于活动状态。如果 Active 表单是 MDI 父级(主窗口),这将意味着 MDI 表单处于活动状态,因此我们查看 MdiParent.ActiveMdiChild

    此示例编写表单文本以进行调试,但您可以按照您希望的任何方式使用该信息。

    【讨论】:

    • (Form.ActiveForm == null) 当我打开 MDI 时。
    • 我运行了示例,它的行为符合预期。您的 MDI 表单是主应用程序表单吗?您还可以修改代码并检查 MdiParent.ActiveMdiChild
    • 我忘了注意这段代码 sn-p 是要从主应用程序窗体的子级执行的。如果您从主窗体运行它,则 MDIParent 属性没有意义。
    猜你喜欢
    • 2016-11-01
    • 2012-06-12
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多