单击 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/