显示MDI孩子总是在其他MDI孩子之上

时间:2010-08-06 11:53:56

标签: c# .net winforms

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

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

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

我如何实现这一目标。

由于

3 个答案:

答案 0 :(得分:2)

更好的解决方案,不需要更改所有其他形式: - 将新工具箱声明为主要父级的控件(this):

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

答案 1 :(得分:1)

该框架显然不支持相互拥有的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子项在容器内最大化时,所需的行为是奇怪的或模糊的。如果在这种情况下单击它,上面的代码将允许拥有的表单落后于最大化的父级。但是,如果你把它放在容器外面,那么它将保持可见。

答案 2 :(得分:0)

//修改

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

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

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

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

ChildForm.Focus()

设置焦点应该是最重要的。

希望它有所帮助。