【问题标题】:How to collapse all nodes except the selected branch?如何折叠除选定分支以外的所有节点?
【发布时间】:2021-02-11 10:19:49
【问题描述】:

如何折叠除当前选中的分支以外的所有节点?

这就是我所拥有的

    private void treeview1_AfterSelect(object sender, TreeViewEventArgs e)
    {
        TreeNode node = e.Node;
        treeView1.CollapseAll();
        while (node.Parent != null)
        {
            node.Expand();
            node = node.Parent;
        }
    }

根节点无论如何都会崩溃。如果我展开,我可以看到子项有时会展开。 在完美的世界中,如果我选择一个节点,它会立即展开,并且此分支之外的任何节点都会折叠。以我现在尝试的方式,我将无法使用 e.Node.Expand();一开始也是。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    如果您只需要展开同一级别的一个分支,请处理TreeView.AfterExpand 事件以折叠邻居节点:

    private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
    {
        // If you need to exclude the root nodes, return if the e.Node.Parent == null.
        var nodes = e.Node.Parent == null ? treeView1.Nodes : e.Node.Parent.Nodes;
    
        if (nodes.Count > 1)
            foreach (var tn in nodes
                .Cast<TreeNode>()
                .Where(n => n != e.Node && n.IsExpanded))
                tn.Collapse();
    }
    

    自动展开一个节点(尤其是当TreeView.ShowPlusMinus属性被禁用时),处理TreeView.AfterSelect事件来展开选中的节点:

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
        if (e.Node.Nodes.Count > 0 && !e.Node.IsExpanded) e.Node.Expand();
    }
    

    【讨论】:

    • 谢谢,这正是我想要的。
    猜你喜欢
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2014-08-03
    相关资源
    最近更新 更多