显示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()
设置焦点应该使其成为最顶层。
希望能帮助到你。