C# .NET Treeview NodeMouseClick事件有延迟吗?

C# .NET Treeview NodeMouseClick事件有延迟吗?,c#,events,treeview,lag,C#,Events,Treeview,Lag,我有以下代码: private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (treeView1.SelectedNode.Nodes.Count == 0) { MessageBox.Show("The node does not have any children.");

我有以下代码:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (treeView1.SelectedNode.Nodes.Count == 0)
            {
                MessageBox.Show("The node does not have any children.");
            }
        }
单击没有子节点的treeView节点时,事件触发似乎有延迟

例如:

  • 我单击具有子节点的父节点-MessageBox不会启动
  • 我单击没有子节点的子节点-MessageBox不会启动
  • 我再次单击没有子节点的子节点-Messagebox激发
  • 我单击具有子节点的父节点-Messagebox激发
  • 我再次单击具有子节点的父节点-messagebox不会启动 调试期间,
    SelectedNode.Count
    值似乎是它前面单击的数字


    这里发生了什么?

    您的问题源于这样一个事实,即在任何与选择相关的事件(
    OnBeforeSelect
    &
    OnAfterSelect
    )之前触发了
    OnNodeMouseClick
    ),这意味着您正在检查的
    SelectedNode
    尚未更新

    如果您只关心选择的更改,请订阅(具有取消选择的功能)或。这也将使用键盘处理更改选择

    与选择相关的事件不同,
    NodeMouseClick
    仍将触发,即使所选节点的状态没有改变(例如,您正在单击已选节点)。而且,顾名思义,这只适用于鼠标单击,而不适用于使用键盘导航树

    要查看背景中实际发生的情况,可以查看TreeView的源代码,特别是。您将看到一条windows
    NM\u-CLICK
    消息触发了
    NodeMouseClick
    。然后,它在单击的(x,y)坐标处执行命中测试,以在鼠标下查找节点,如果找到,则在事件的参数内将其返回给您


    TLDR:订阅
    节点emouseClick
    时,您的选择尚未更改(并且可能没有更改),但您可以通过检查事件参数来查看单击的节点。仅在使用鼠标时有效,不使用键盘。

    。完美-这就像一个魅力。我想是我错过了什么。谢谢你的意见。