4

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

说你有一个TreeView...CheckBoxes

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

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

4

2 回答 2

5

复制问题表明这绝对是一个错误*(故意星号)。因为当您双击 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. 看起来复选框实际上以某种方式获得焦点。如果我双击树节点然后单击表单上的按钮,则需要单击两次。第一个是分散我认为是复选框的焦点,接下来是实际单击按钮。

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

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

于 2012-12-13T23:37:16.083 回答
0

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

因此,如果要在树视图上通过鼠标选择来选择节点,则需要准确地单击它。

希望这可以帮助。

于 2014-11-10T13:57:43.370 回答