如何防止Windows窗体被发送到后台,或者如何将其保持在特定的z顺序



我在表单布局排序(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);            
}

相关内容

最新更新