TreeView(带复选框)无法正确处理点击?

时间:2013-06-28 04:01:47

标签: c# events treeview double-click

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

这里到底发生了什么,我该如何解决?

1 个答案:

答案 0 :(得分:9)

这是启用Checkbox树视图的问题,但是有一些可接受的工作区。 首先:MS了解问题,但拒绝解决问题......:http://connect.microsoft.com/VisualStudio/feedback/details/775922/treeview-double-click-bug#details< - Bug报告....

所以没有办法可以解决它...最简单的做法是继承Treeview并强制禁用复选框上的dblclick ... 回答(关于SOF):c# treeview ignore double click only at checkbox

希望这会有所帮助......