【问题标题】:TreeView (with checkboxes) not processing clicks correctly?TreeView(带复选框)没有正确处理点击?
【发布时间】:2013-06-25 18:29:45
【问题描述】:

我有一个基本上类似于 Photoshop 图层调色板的 TreeList。它是一个分层列表,带有用于切换文档各个层的可见性的复选框。这是通过 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 事件,但实际双击不会。

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

【问题讨论】:

    标签: c# events treeview double-click


    【解决方案1】:

    这是启用复选框的树视图的问题,但是有一些可接受的解决方法.. 首先: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

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

    【讨论】:

    • 啊哈!很高兴听到我不仅要疯了,而且这是别人的错误,而不是我的错误,为了改变。子类解决方案完美运行,谢谢!
    猜你喜欢
    • 2014-04-16
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多