首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET树视图NodeMouseClick事件是否滞后?

.NET树视图NodeMouseClick事件是否滞后?
EN

Stack Overflow用户
提问于 2018-11-04 22:54:42
回答 1查看 238关注 0票数 1

我有这样的代码:

代码语言:javascript
复制
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (treeView1.SelectedNode.Nodes.Count == 0)
            {
                MessageBox.Show("The node does not have any children.");
            }
        }

当单击没有子节点的treeView节点时,事件触发似乎会出现滞后。

例如:

  1. 我单击带有子节点的父节点- MessageBox不触发
  2. 我单击一个没有子节点的子节点- MessageBox不触发
  3. 我再次单击没有子节点的子节点- Messagebox火灾
  4. 我单击带有子节点的父节点- Messagebox火。
  5. 我再次单击带有子节点的父节点- messagebox不触发。

在调试期间,SelectedNode.Count值似乎是它前面单击的数字。

这里发生什么事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-05 05:35:40

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

如果您只关心所选内容的更改,则订阅BeforeSelect (可以取消所选内容)或AfterSelect。这将处理改变的选择使用键盘以及。

与与选择相关的事件不同,即使所选节点没有变化,NodeMouseClick仍然会触发(例如,单击已经选定的节点)。此外,顾名思义,这只适用于鼠标单击,而不是当使用键盘导航您的树。

要查看背景中实际发生了什么,您可以查看TreeView的源代码,特别是WmNotify法。您将看到NodeMouseClick是由windows NM_CLICK消息触发的。然后在单击的(x,y)坐标处执行命中测试,以查找鼠标下的节点,如果找到,则在事件的TreeNodeMouseClickEventArgs参数中将其返回给您。

TLDR:当订阅NodeMouseClick时,您的选择还没有改变(而且它可能没有改变),但是您可以通过检查事件arg来查看单击的节点。只在使用鼠标时工作,而不使用键盘。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53146313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档