Treeview节点单击行为

时间:2014-05-20 11:45:48

标签: winforms click treeview double-click treenode

我有一个Winform应用程序,我在使用TreeView。此应用程序的某些用户遇到的问题是他们必须双击某个节点才能展开它。所以我添加了这段代码,使用单击来扩展节点:

Private Sub MyTreeView_NodeMouseClick(sender As System.Object, 
     e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles MyTreeView.NodeMouseClick

    If e.Node.IsExpanded Then
        e.Node.Collapse()
    Else
        e.Node.Expand()
    End If

End Sub

这有效但我注意到有关点击节点的奇怪行为。我注意到有两个地方有不同的行为。第一个位置是+/-符号,旁边是圆点(图中的第一个圆圈),第二个位置是节点的文本(第二个圆圈):

enter image description here

通常单击第一个位置就足以展开节点,必须在第二个位置双击才能展开节点。然后,当我使用我的代码时,单击第二个位置就足以扩展节点,但是当我单击第一个位置时,节点将展开并折叠。

为什么用户必须在第二个位置再点击两次才能展开节点?如何通过单击两个位置来扩展节点?谢谢你们!

1 个答案:

答案 0 :(得分:7)

加号/减号仍被视为节点的一部分 - 当用户点击它时,您的代码会切换扩展,但框架会继续并执行相同的操作。

添加到您的代码中,不对加号/减号执行操作:

private static void TreeView_OnNodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    var hitTest = e.Node.TreeView.HitTest(e.Location);
    if (hitTest.Location == TreeViewHitTestLocations.PlusMinus)
        return;

    if (e.Node.IsExpanded)
        e.Node.Collapse();
    else
        e.Node.Expand();
}