C# TreeView(带有复选框)未正确处理单击?

C# TreeView(带有复选框)未正确处理单击?,c#,events,treeview,double-click,C#,Events,Treeview,Double Click,我有一个树状列表,基本上就像Photoshop图层调色板。它是一个带有复选框的分层列表,用于切换文档各个层的可见性。这是通过BeforeChecked事件完成的,该事件在.Checked值切换之前引发 它工作得很好,除非你双击它,这时一切似乎都失控了 如果双击复选框一次,它将两次切换选中的值(这是预期的行为),但不会两次切换图层的可见性,因为它不会两次提升BeforeChecked 我想我应该把这个放在MouseDoubleClick活动中: TreeViewHitTestInfo hit =

我有一个树状列表,基本上就像Photoshop图层调色板。它是一个带有复选框的分层列表,用于切换文档各个层的可见性。这是通过BeforeChecked事件完成的,该事件在.Checked值切换之前引发

它工作得很好,除非你双击它,这时一切似乎都失控了

如果双击复选框一次,它将两次切换选中的值(这是预期的行为),但不会两次切换图层的可见性,因为它不会两次提升BeforeChecked

我想我应该把这个放在MouseDoubleClick活动中:

TreeViewHitTestInfo hit = treeLayerPalette.HitTest(e.X, e.Y);
hit.Node.Checked = !(hit.Node.Checked);
这适用于除第一次外的所有双击。因此,它首先只会引发BeforeChecked事件一次(而不是MouseDoubleClick),使复选框与层的可见性不同步,然后所有后续双击都会引发BeforeChecked和MouseDoubleClick事件(这反过来会引发BeforeChecked事件),从而保持不正确的关系

另外,我在双击事件中放置了一个MessageBox.Show()。令人尴尬的是,它实际上并没有在双击时显示,而是在第三次单击时显示,无论实际双击和第三次单击之间经过了多长时间。双击20秒后执行的第三次单击将引发MouseDoubleClick事件,但实际的双击不会引发


这里到底发生了什么,我如何修复它?

启用复选框的TreeView存在问题,但是有一些可接受的工作循环。。
第一:MS知道问题,但拒绝解决它…: 这是启用复选框的TreeView的一个问题,但是有一些可接受的工作循环。。
第一:MS知道问题,但拒绝解决它…:啊哈!很高兴听到我不只是疯了,这是别人的错误,而不是我的,为了改变。子类解决方案非常有效,谢谢!啊哈!很高兴听到我不只是疯了,这是别人的错误,而不是我的,为了改变。子类解决方案非常有效,谢谢!