【问题标题】:Treeview Node click behaviorTreeview 节点点击行为
【发布时间】:2014-07-08 15:56:32
【问题描述】:

我有一个使用 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

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

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

为什么用户必须在第二个地方再点击两次才能展开节点?在这两个地方单击一下,我可以做些什么来扩展节点?谢谢各位!

【问题讨论】:

    标签: winforms click treeview double-click treenode


    【解决方案1】:

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

    添加到您的代码中以不作用于加号/减号:

    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 方法和 TreeViewHitTestLocations。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多