c# - 如何防止将 Windows 窗体发送到后面或如何将其保持在特定的 z 顺序上

标签 c# winforms

我在表单布局排序(z 顺序)方面遇到了一个奇怪的问题。假设我有三个 Windows 窗体; Form1、Form2 和 Form3。

Form1 作为应用程序的主窗体启动,它有一个将 Form2 作为对话框打开的按钮(使用 ShowDialog())。 Form2 也有打开 Form3 的按钮(但不是作为对话框,使用 Show())。 一旦打开 Form3,只要单击 Form2,它就会跳到后台(在 Form1 后面)。单击 Form2 时,我希望 Form3 至少保持在 Form1 之上,因为它包含一些有助于处理 Form2 的选项。

我不想使用 Form3.TopMost = True; 因为即使您打开或切换到任何其他应用程序(例如 Windows Explorer、Internet浏览器等)。

.BringToFront() 也没有帮助。我已经尝试了一些相关表单事件与 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();            
}

最佳答案

尝试这样的事情,可以帮助设置 parent 。

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/

相关文章:

c# - C# 桌面应用程序中 Windows 窗体上的菜单

VB.NET 2005 - "Global"事件处理程序?

vb.net - MessageBox.Show 不引发 HelpRequested 事件

c# - Gridview 中的索引超出范围错误

c# WPF 更改 CheckBox 的复选颜色

c# - 对于控制台和 Windows 应用程序来说,await Task.Run(...) 的行为不同

c# - Microsoft Sans Serif 字体未在中文本地化 Windows 中使用

c# - 如何通过单击按钮向上或向下移动 ListView 项目

c# - 如何在 C# 中向 google doc 表格单元格添加内容

c# - 在网格类内拖放时鼠标位置错误