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

标签 c# .net treeview scroll focus

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

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()));
        }

最佳答案

您使用的 TreeView 事件很重要,不清楚您使用的是哪一个。 TV 不喜欢在触发事件时失去焦点,它会自行将焦点移回。

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


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

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

关于c# - 将焦点从一个控件切换到另一个控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19796276/

相关文章:

c# - 为什么 appSettings 文件属性不允许父目录的路径?

c# - Java - 通过 Web 服务和 XML 发送可能包含非法字符的 UTF-8 字符串

c# - Azure持久框架功能应用程序非常慢

c# - TreeView_NodeMouseClick 处理程序

c# - 在 Unity 中构建旋转电梯

c# - ASP.Net Core `cookies authentication` 在哪里存储对该 cookie 的引用?

c# - 我可以有一个方法的扩展方法吗?

c# - 为什么 C# 编译器重载解析算法将具有相同签名的静态成员和实例成员视为相等?

c# - ASP.NET PostBack 选择 TreeView 的复选框

c# - TreeView 添加排序