【问题标题】:Main form is always stealing focus, when child form is created out of treeView当从 treeView 创建子窗体时,主窗体总是在窃取焦点
【发布时间】:2013-05-15 07:51:14
【问题描述】:

我有以下问题: 我的程序(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中选择一个节点时,主窗口在子窗体出现后立即跳转到前面。

怎么了?

【问题讨论】:

    标签: c# winforms treeview


    【解决方案1】:

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

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

    如果不接受子窗体始终位于其父窗体之上,则将其更改为:

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

    【讨论】:

      【解决方案2】:

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

      aNewSon.TopMost = true;
      

      检查Msdn about TopMost 属性。

      【讨论】:

        【解决方案3】:

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

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

        可能,比你也可以调用BringToFront方法Application.OpenForms["Form1"].BringToFront();

        在你的情况下:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多