将焦点从一个控件切换到另一个控件

时间:2013-11-05 18:38:21

标签: c# .net treeview scroll focus

在我的树视图中单击标签后,我希望焦点切换到我的Web浏览器,以便用户可以向上和向下滚动,而无需先单击浏览器。这是我现在的代码,但滚动仍然滚动树视图:

if (e.Node.Text == "Sales Screen")
{
    var txt = Properties.Resources.SalesScreen;
    webBrowser1.DocumentText = txt;
    this.ActiveControl = webBrowser1;
}

这样做的正确方法是什么?谢谢!

编辑:现在使用它,仍然无法正常工作:

private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        if (e.Node.Text == "Sales Screen")
        {
            var txt = Properties.Resources.SalesScreen;
            webBrowser1.DocumentText = txt;
            this.BeginInvoke(new Action(() => webBrowser1.Focus()));
        }

2 个答案:

答案 0 :(得分:3)

您使用的TreeView事件非常重要,您不清楚使用哪一个。电视不喜欢在发射事件时失去焦点,它会自动将其移回。

仅使用AfterSelect事件来执行此代码。


是的,NodeMouseDoubleClick事件有此问题。解决方法是延迟事件处理程序的操作,直到在电视处理完事件后。优雅地使用Control.BeginInvoke()方法。像这样:

    private void treeView1_MouseDoubleClick(object sender, MouseEventArgs e) {
        this.BeginInvoke(new Action(() => webBrowser1.Focus()));
    }

答案 1 :(得分:1)

if (e.Node.Text == "Sales Screen")
{
    var txt = Properties.Resources.SalesScreen;
    webBrowser1.DocumentText = txt;
    webBrowser1.Focus();
}