TreeView重新关注Ctrl + Click

时间:2009-02-20 14:09:21

标签: winforms treeview focus click double-click

我有一个WinForms TreeView控件,我想根据当前选择的节点打开另一个表单。我在Ctrl +点击节点时打开其他表单。

目前,如果我在DoubleClick处理程序中打开另一个表单(并且显然双击该节点),它的工作方式是我想要的;但是,如果我使用Click(或MouseClick)处理程序并在按下Control键时打开另一个表单,它会正确打开另一个表单,但会将焦点返回到原始表单。

打开另一张表格后,如何让焦点不再回到原始表格(我仍然希望保持打开状态)?为什么Click和DoubleClick处理程序之间存在不同的行为?

1 个答案:

答案 0 :(得分:8)

TreeView在事件返回后窃取焦点。很烦人。您可以使用技巧:使用Control.BeginInvoke延迟事件的操作:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
  this.BeginInvoke(new TreeNodeMouseClickEventHandler(delayedClick), sender, e);
}
private void delayedClick(object sender, TreeNodeMouseClickEventArgs e) {
  // Now do your thing...
}

只要TreeView的所有事件都已完成运行并且程序空闲并重新进入消息循环,delayedClick方法就会立即运行。