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

10-13 09:13