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节点时,事件触发似乎有延迟
例如:
SelectedNode.Count
值似乎是它前面单击的数字
这里发生了什么?您的问题源于这样一个事实,即在任何与选择相关的事件(
OnBeforeSelect
&OnAfterSelect
)之前触发了OnNodeMouseClick
),这意味着您正在检查的SelectedNode
尚未更新
如果您只关心选择的更改,请订阅(具有取消选择的功能)或。这也将使用键盘处理更改选择
与选择相关的事件不同,NodeMouseClick
仍将触发,即使所选节点的状态没有改变(例如,您正在单击已选节点)。而且,顾名思义,这只适用于鼠标单击,而不适用于使用键盘导航树
要查看背景中实际发生的情况,可以查看TreeView的源代码,特别是。您将看到一条windowsNM\u-CLICK
消息触发了NodeMouseClick
。然后,它在单击的(x,y)坐标处执行命中测试,以在鼠标下查找节点,如果找到,则在事件的参数内将其返回给您
TLDR:订阅
节点emouseClick
时,您的选择尚未更改(并且可能没有更改),但您可以通过检查事件参数来查看单击的节点。仅在使用鼠标时有效,不使用键盘。。完美-这就像一个魅力。我想是我错过了什么。谢谢你的意见。