【问题标题】:.net TreeView double click bug.net TreeView 双击bug
【发布时间】:2012-12-13 23:18:32
【问题描述】:

所以我在 blog-o-sphere 上看到了很多关于这个的讨论......但我无法判断这是一个错误,还是只是我不理解的怪异行为......

假设你有一个TreeViewCheckBoxes...

CheckBoxNodes 之一上的Double-click,然后再次单击该框...您会注意到状态似乎没有正确更改。

这是bug??我总是很谨慎地说我在.NET 中发现了一个“错误”...

【问题讨论】:

标签: .net treeview


【解决方案1】:

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

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

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

  1. 在双击复选框期间调用 AfterCheck 事件一次。
  2. 从一个未选中节点的复选框开始并双击它,您会发现该节点认为它仍然处于选中状态(如上所述)。这也解释了为什么下一次单击不会将复选框更改为选中。这是因为它认为它已被选中,因此将选中的属性设置为 false,这不会更改 UI。之后的下一次单击将其设置回预期的选中状态。
  3. 看起来复选框实际上以某种方式获得焦点。如果我双击树节点然后单击表单上的按钮,则需要单击两次。第一个是分散我认为是复选框的焦点,接下来是实际单击按钮。

我的结论是,不知何故,双击聚焦复选框,导致第二次鼠标点击不会发送到树节点,而是发送到复选框,这就是复选框未选中且树节点为无的原因- 更明智的。

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

【讨论】:

    【解决方案2】:

    我在树视图选择方面遇到了类似的问题。我管理了 Treeview.NodeMouseDoubleClick 事件,每个节点通过鼠标双击运行并执行不同的进程。但是当我双击树视图(而不是节点)时,代码已经崩溃。当我意识到 treeview.SelectedNode 与 Treeview.NodeMouseDoubleClick.TreeNodeMouseClickEventArgs e.Node 参数返回的不同时,我解决了这个问题。

    因此,如果你想在treeview上用鼠标选择一个节点,你需要精确地点击它。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-25
      • 2014-07-23
      • 2019-05-21
      • 1970-01-01
      • 2016-08-03
      • 2014-12-30
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多