我有一个 TreeList,它基本上就像一个 Photoshop 图层调色板。它是一个分层列表,带有用于切换文档各个层的可见性的复选框。这是通过 BeforeChecked 事件完成的,该事件在 .Checked 值切换之前引发。
它工作正常,除非你双击它,此时一切似乎都乱套了。
如果您双击一个复选框一次,它会切换两次选中的值(这是预期的行为),但它不会切换图层的可见性两次,因为它不会提高 BeforeChecked 两次。
我想我可以通过将它放在 MouseDoubleClick 事件中来解决这个问题:
TreeViewHitTestInfo hit = treeLayerPalette.HitTest(e.X, e.Y);
hit.Node.Checked = !(hit.Node.Checked);
这适用于除第一次之外的所有双击。所以它一开始只引发一次 BeforeChecked 事件(而不是 MouseDoubleClick),使复选框与图层的可见性不同步,然后所有后续双击引发 BeforeChecked 和 MouseDoubleClick 事件(这反过来引发BeforeChecked 事件),保持这种不正确的关系。
此外,在某一时刻,我在 DoubleClick 事件中放置了 MessageBox.Show()。尴尬的是,它实际上并没有在双击时显示,而是在第三次单击时显示,无论实际双击和第三次单击之间经过了多少时间。双击后 20 秒执行的第三次单击将引发 MouseDoubleClick 事件,但实际双击不会。
这里实际发生了什么,我该如何解决?