.net TreeView双击bug

时间:2012-12-13 23:18:32

标签: .net treeview

所以我在博客o-sphere上看过很多关于这个问题的讨论......但是我不知道这是一个bug,还是只是我不理解的bizzar行为......

假设您有TreeView CheckBoxes ...

在其中一个Double-clickCheckBox上{p> Nodes,然后再次点击该框...您会注意到该状态似乎没有正确更改。

这是bug ??我总是谨慎地说我在.NET ...

中发现了一个“错误”

2 个答案:

答案 0 :(得分:3)

复制问题表明这绝对是一个错误*(故意的星号)。因为当您在TreeView中双击未选中的复选框时,请调用以下代码:

For Each node As TreeNode In Me.TreeView1.Nodes
    Console.WriteLine("{0}: {1}", node.Name, node.Checked)
Next

您会发现,在视觉上未选中时,节点会认为它仍然处于检查状态。我可以看到发生了一些事情:

  1. 在复选框双击期间调用AfterCheck事件一次。
  2. 从未选中的节点复选框开始,然后双击它会发现节点认为它仍然被选中(如上所述)。这也解释了为什么下一次单击不会更改要选中的复选框。这是因为它认为它已被检查,因此将checked属性设置为false,这不会更改UI。之后的下一次单击将其设置回检查预期的位置。
  3. 看起来复选框实际上是以某种方式聚焦。如果我双击treenode然后单击表单上的按钮,则需要两次单击。第一个是取消我认为是复选框的重点,接下来是实际点击按钮。
  4. 我的结论是,不知何故,双击是聚焦复选框,导致第二次鼠标点击不被发送到treenode,但它被发送到复选框,这就是为什么复选框被取消选中,treenode为none -the-明智。

    * 这是不应该发生的行为,如何对其进行分类,我将留给微软。

答案 1 :(得分:0)

我在树视图选择中遇到了类似的问题。我管理过Treeview.NodeMouseDoubleClick事件,每个节点都使用鼠标双击运行并执行不同的过程。但是当我双击树视图(而不是节点上)时,代码崩溃了。当我实现treeview时,我解决了这个问题.SelectedNode与Treeview.NodeMouseDoubleClick.TreeNodeMouseClickEventArgs e.Node参数返回的不一样。

因此,如果要在树视图中选择具有鼠标选择的节点,则需要完全单击它。

希望这有帮助。