1

我有一个 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 事件,但实际双击不会。

这里实际发生了什么,我该如何解决?

4

1 回答 1

9

这是启用复选框的树视图的问题,但是有一些可接受的解决方法.. 首先:MS 知道问题但拒绝修复它...:http ://connect.microsoft.com/VisualStudio/feedback/details/ 775922/treeview-double-click-bug#details <-- 错误报告....

所以没有办法,只能解决它.. 最简单的方法是将 Treeview 子类化并强制禁用复选框上的 dblclick ... 答案(在 SOF 上):c#treeview ignore double click only at checkbox

希望这可以帮助....

于 2013-06-28T10:53:17.670 回答