当使用treeView创建子表单时,主表单始终是窃取焦点

时间:2013-05-15 07:51:15

标签: c# winforms treeview

我遇到以下问题: 我的程序(Winforms)有一个带有treeView控件的主窗口。 当用户在treeView中选择一个节点时,应创建一个新的子窗口。

这很好用。 但问题是,在这个子窗口变为可见之后,主窗口会出现在前面并部分隐藏这个子窗口。

我已经构建了一个小模型,以确保它不仅与我的程序相关:

namespace FatherAndSon
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

    private void button1_Click(object sender, EventArgs e)
    {
        Son aNewSon = new Son();
        aNewSon.Visible = true;
    }

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
        Son aNewSon = new Son();
        aNewSon.Visible = true;
    }
}
}

当我按下button1时,一切都很好但是当我在treeView中选择一个节点时,主窗口会在子表单出现后立即跳到前面。

有什么问题?

3 个答案:

答案 0 :(得分:0)

Visible = true更改为.Show(this) - >此更改将使子窗口始终位于其Parent(本例中为主窗口)之上。

Son aNewSon = new Son();
aNewSon.Show(this);

如果儿童表格始终位于其父母之上是不可接受的,则将其更改为:

Son aNewSon = new Son();
aNewSon.Visible = true;
aNewSon.Focus();

答案 1 :(得分:0)

要让“aNewSon”始终位于顶部,您还可以尝试将“TopMost”属性添加到新创建的表单中:

aNewSon.TopMost = true;

检查Msdn about TopMost属性。

答案 2 :(得分:0)

将父表单添加到构造函数中尝试使用“Show”方法而不是visible = true。

    Son aNewSon = new Son();
    aNewSon.Show(this);

可能比您还可以调用BringToFront方法Application.OpenForms["Form1"].BringToFront();

在你的情况下:

    Son aNewSon = new Son();
    aNewSon.Show(this);
    aNewSon.BringToFront();