我在表单布局排序(z-order)方面遇到了一个奇怪的问题。假设我有三个Windows窗体;表格1、表格2和表格3。
Form1作为应用程序的主窗体启动,它有一个按钮,可以将Form2作为对话框打开(使用ShowDialog()
)。Form2也有打开Form3的按钮(但不是作为对话框,使用Show()
)。打开Form3后,只要单击Form2,它就会跳到背景(在Form1后面)。当点击Form2时,我想让Form3至少高于Form1,因为它包含一些有助于处理Form2的选项。
我不想使用Form3.TopMost = True;
,因为即使你打开或切换到任何其他应用程序(如Windows资源管理器、Internet浏览器等),它也会让Form3占据几乎所有内容的首位。
.BringToFront()
也无济于事。我尝试了一些相关Form事件与Form.BringToFront()
、Form.Activate()
等的组合,但都是徒劳的。如有任何帮助,我们将不胜感激。
这是供参考的代码:
表格1:
Form2 obj2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{
if (obj2 != null && obj2.Visible) { obj2.Focus(); return; }
obj2 = new Form2();
obj2.ShowDialog();
}
表格2:
Form3 obj3 = new Form3();
private void button1_Click(object sender, EventArgs e)
{
if (obj3 != null && obj3.Visible) { obj3.Focus(); return; }
obj3 = new Form3();
obj3.Show();
}
尝试这样的操作,可以帮助设置父级。
Form3 obj3 = new Form3();
private void button1_Click(object sender, EventArgs e)
{
if (obj3 != null && obj3.Visible) { obj3.Focus(); return; }
obj3 = new Form3();
obj3.Show(this);
}