对于那些自己没有遇到问题的人来说,这个问题似乎是显而易见的.
我需要处理VTV中的选择变化.我有一个平面的节点列表.我需要随时处理所有当前选定的节点
这是最常见和预期的行为,就像Windows资源管理器一样:当您使用鼠标和/或键盘选择文件时,信息面板会显示其属性.我只需要那个.这就是我陷入困境的地方.
我的一些研究如下.
起初我使用OnChange.它似乎工作得很好,但我注意到一些奇怪的闪烁,我发现在最常见的情况下(选择一个节点,用户点击另一个节点)OnChange被触发两次:
这个问题是可谷歌的,所以我发现人们使用OnFocusChange和OnFocusChanging而不是OnChange.但这种方式仅适用于单一选择.通过多个选择,拖动选择和导航键,这不起作用.在某些情况下,Focus事件甚至根本不会触发(例如,通过单击空白区域删除选择).
我做了一些调试输出研究,以了解这些处理程序如何在不同的场景中被解雇.我发现的是一团糟,没有任何明显的感觉或模式.
C OnChange
FC OnFocusChange
FCg OnFocusChanging
- nil parameter
* non-nil parameter
! valid selection
Nodes User action Handlers fired (in order)
selected
0 Click node FCg-* C*!
1 Click same FCg**
1 Click another C- FCg** C*! FC*
1 Ctlr + Click same FCg** C*!
1 Ctrl + Click another FCg** C*! FC*
1 Shift + Click same FCg** C*!
1 Shift + Click another …Run Code Online (Sandbox Code Playgroud)