winforms - TreeView 在 Ctrl+Click 上重新获取焦点

标签 winforms treeview focus click double-click

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

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

打开另一个表单后,如何让焦点不返回到原始表单(我仍然想保持打开状态)?为什么 Click 和 DoubleClick 处理程序之间的行为不同?

最佳答案

事件返回后,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 的所有事件完成运行并且您的程序空闲并重新进入消息循环,delayClick 方法就会运行。

关于winforms - TreeView 在 Ctrl+Click 上重新获取焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/569673/

相关文章:

c# - SQLite 删除列

asp.net - TreeView VB 中的目录结构

jQuery live focus 函数问题

c++ - 隐藏的对话框暂时占据焦点

WPF ItemsControl - 如何知道项目何时完成加载,以便我可以关注第一个?

C# 列表框实时搜索

c# - 如何在不同的浏览器中获取 Html 文档,当 Html 文档完全加载时作为图像?

c# - 为指定的图像数据创建 IntPtr

wpf - 如何强制 ItemContainerGenerator 为项目生成容器或如何在启用 UI 虚拟化时将 TreeView 滚动到展开节点?

python - 如何保存 gtk TreeView (排序顺序和位置)?