【问题标题】:Show MDI child Always on top of other MDI child显示 MDI 子项 始终在其他 MDI 子项之上
【发布时间】:2011-03-26 07:23:12
【问题描述】:

如何始终在其他 MDIChild 表单之上显示 MDIChild 表单?

我已将 ChildForm 的 TopMost 属性设置为 True,但表单的行为方式仍然相同...

我尝试将 ChildForm 的 TopLevel 属性设置为 True 并收到错误消息...“无法更改 Parented 控件的顶级样式。”

我如何做到这一点。

谢谢

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    //编辑

    由于只需要关注您的 MdiChild 表单中的一个,请尝试以下操作:

    MdiChildActivate事件中重新聚焦或重新激活需要的窗口作为激活的子窗口。

    您还可以使用Deactivated 事件来强制重新聚焦相关子窗口。

    当您创建表单并显示它时,还附加一个对焦点方法的调用。

    ChildForm.Focus()
    

    设置焦点应使其位于顶部。

    希望对你有帮助。

    【讨论】:

    • 我相信 Focus 会将表单置于活动状态并将其显示在所有其他表单上...但是当用户将焦点更改为其他 MDIChild 表单时,此表单将隐藏在该表单后面。 .. 简而言之,我想实现 Always on Top,但限制在我的 MDIChild 窗口内
    • 好的,现在我得到了更清晰的图像。我的解决方案应该对表单进行 1 次聚焦。感谢您的澄清!
    • 当我在 BlueMonk 所说的 form2 的 ActivateEvent 上使用激活代码时,它可以工作......但是当我使用这个(顶部)表单的 Deactivate / Leave 事件时,它不起作用......
    【解决方案2】:

    该框架显然不支持相互拥有的 MDI 子窗口,因此您必须自己模拟该行为:

      static Form f1 = new Form();
      static Form f2 = new Form();
      static Form f3 = new Form();
    
      [STAThread]
      static void Main()
      {
         f1.IsMdiContainer = true;
         f2.MdiParent = f1;
         f3.MdiParent = f1;
         f1.Show();
         f2.Show();
         f3.Show();
         f2.Activated += new EventHandler(f2_Activated);
         Application.Run(f1);
      }
    
      static void f2_Activated(object sender, EventArgs e)
      {
         f3.Activate();
      }
    

    我通常只是让拥有的表单不是 MDI 子表单。它们不会停留在 MDI 容器中,但至少会停留在前面。

    可能存在此限制的原因是,当作为所有者的 MDI 子项在容器内最大化时,会出现奇怪或模棱两可的期望行为。如果您在这种情况下单击上面的代码,则上面的代码将允许拥有的表单落后于最大化的父级。但是,如果您将它放在容器之外,那么它将保持可见。

    【讨论】:

    • 您的代码运行良好...但可悲的是我必须为我的应用程序的所有其他形式连接此事件。
    • 子激活时MDI父也有一个事件。
    【解决方案3】:

    不需要更改所有其他表单的更好解决方案:- 将新工具箱声明为 Main Parent (this) 的 控件

    fForm fFormObj = new fForm();
    fFormObj.TopLevel = false;
    this.Controls.Add(fFormObj);
    fFormObj.Parent = this;
    fFormObj.TopMost = true;
    fFormObj.Show();
    

    【讨论】:

    • 感谢分享!效果很好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2020-05-31
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多