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

C# - Find a specific node or subnode of a treeview control

我对 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'。

希望有人能帮我想办法让所有的节点和子节点都失控。感谢和抱歉的长解释。

通过迭代 TreeView->Nodes ,您只会获得顶级节点。 TreeView->Nodes(TreeNodeCollection 类型)有一个 Find(string, boolean) 方法,您可以使用该方法搜索具有特定文本的节点。你可以像

这样调用这个方法
Repository_TreeView.Nodes.Find(specificPTN, true) 

获取所有匹配的节点。