【问题标题】:TreeView re-grabs focus on Ctrl+ClickTreeView 重新获取 Ctrl+Click 的焦点
【发布时间】:2009-02-21 06:00:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: winforms treeview focus click double-click


    【解决方案1】:

    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...
    }
    

    DelayClick 方法会在 TreeView 的所有事件完成运行并且您的程序进入空闲状态并重新进入消息循环后立即运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多