C# - 查找树视图控件的特定节点或子节点

Posted

技术标签:

【中文标题】C# - 查找树视图控件的特定节点或子节点【英文标题】:C# - Find a specific node or subnode of a treeview control 【发布时间】:2021-12-20 04:19:45 【问题描述】:

WinForm 中的 TreeView 控件有问题。问题是,我需要通过使用 while 循环并使用先前插入到控件中的节点作为父节点搜索条件来自动化插入节点的过程。

我的问题出现了,当我在控件中查找节点时,我使用以下代码:

foreach (TreeNode singleNode in Repository_TreeView.Nodes)

    if (singleNode.Text.Contains(specificPTN) == true)
    
        Repository_TreeView.SelectedNode = singleNode;
    

但是,通过这种方式,我只能获取层次结构中***别的节点。所以,例如:

/--------------------------------------------------\
|    + rootnode1                                   |
|    |        +---> childnode1                     |
|    |                      +---> grandchildnode1  |
|    |                      |                      |
|    |                      +---> grandchildnode1  |
|    |                                             |
|    + rootnode2                                   |
|             +---> childnode2                     |
|                           +---> grandchildnode2  |
|                           |                      |
|                           +---> grandchildnode2  |
|                                                  |
|                                                  |
\--------------------------------------------------/

在这种情况下,当我需要获取所有其他子节点时,我的代码只会获取节点“rootnode1”和“rootnode2”。

我也尝试使用这个 lambda 表达式按名称查找节点:

TreeNode[] parentNodes = Repository_TreeView.Nodes
                                    .Cast<TreeNode>()
                                    .Where(r => r.Text == specificPTN)
                                    .ToArray();

然而,结果总是一样的,“rootnode1”和“rootnode2”总是被找到。

我希望有人能帮我找到一种方法让所有节点和子节点失控。感谢并为冗长的解释感到抱歉。

【问题讨论】:

【参考方案1】:

通过遍历 TreeView->Nodes ,您只会获得***节点。 TreeView->Nodes(类型为 TreeNodeCollection) 有一个 Find(string, boolean) 方法,可用于搜索具有特定文本的节点。你可以像这样调用这个方法

Repository_TreeView.Nodes.Find(specificPTN, true) 

获取所有匹配的节点。

【讨论】:

现在可以了!非常感谢,你帮了我很多。几天来我一直在寻找解决方案。

以上是关于C# - 查找树视图控件的特定节点或子节点的主要内容,如果未能解决你的问题,请参考以下文章

树(二叉树的插入删除查找遍历)

数据结构与算法简记--红黑树

jdk源码分析——TreeMap

C# winform treeview 节点展开状态的图标设置

数据结构-树:根节点子节点叶子节点是什么?

C#实现二叉查找树