我在表单布局排序(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);
}
关于c# - 如何防止 Windows 窗体被发送到后面或如何将其保持在特定的 z 顺序上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20914230/