Winforms 树视图节点单击行为

Winforms 树视图节点单击行为,winforms,click,treeview,double-click,treenode,Winforms,Click,Treeview,Double Click,Treenode,我有一个使用TreeView的Winform应用程序。此应用程序的某些用户存在一个问题,即他们必须双击某个节点才能将其展开。因此,我添加了以下代码以使用单击展开节点: Private Sub MyTreeView_NodeMouseClick(sender As System.Object, e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles MyTreeView.NodeMouseClick If

我有一个使用TreeView的Winform应用程序。此应用程序的某些用户存在一个问题,即他们必须双击某个节点才能将其展开。因此,我添加了以下代码以使用单击展开节点:

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
这是可行的,但我注意到关于点击节点的奇怪行为。我注意到有两个地方有不同的行为。第一个位置是+/-符号和旁边的点(图片中的第一个圆),第二个位置是节点的文本(第二个圆):

通常,单击第一个位置就足以展开节点,双击第二个位置就可以展开节点。然后,当我使用代码时,单击第二个位置就足以展开节点,但当我单击第一个位置时,节点将展开并折叠


为什么用户必须在第二个位置再单击两次才能展开节点?我可以通过单击两个位置来展开节点吗?谢谢你们

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

添加到代码中,使其不作用于加号/减号:

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();
}

我的计划是检查x,y坐标,并计算坐标是属于+/-还是属于节点文本。我不知道HitTest方法和TreeView测试位置。非常感谢。