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

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

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

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

我如何实现这一目标。

谢谢

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

一个不需要改变其他forms的更好的解决方案: – 将新工具箱声明为Main Parent(this)的控件

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

//编辑

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

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

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

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

 ChildForm.Focus() 

设置焦点应该使其成为最顶层。

希望能帮助到你。