有没有在TreeView.Nodes集合中搜索TreeNode.Text字段的方法?

Rom*_*omz 25 c# treeview treenode winforms

像这样:

TreeNode[] treeNodes = treeView.Nodes.Find(searchString, true);
Run Code Online (Sandbox Code Playgroud)

但我希望它在text现场搜索而不是name字段.

Hab*_*bib 39

我不知道任何内置方法,但您可以使用LINQ

TreeNode[] treeNodes = treeView.Nodes
                                    .Cast<TreeNode>()
                                    .Where(r => r.Text == "yourText")
                                    .ToArray();
Run Code Online (Sandbox Code Playgroud)

  • 这比*for*循环更有效(更快)吗?可以在不使用"Cast"的情况下完成吗?而另一件事,这对树上的孩子不起作用.仅适用于根元素. (4认同)
  • 此方法不会搜索子节点 (2认同)

L.B*_*L.B 26

要搜索所有树节点(不仅是直接子节点),您可以使用下面的扩展方法

var nodes = treeView1.FlattenTree()
                     .Where(n => n.Text == "sometext")
                     .ToList();
Run Code Online (Sandbox Code Playgroud)

-

public static class SOExtension
{
    public static IEnumerable<TreeNode> FlattenTree(this TreeView tv)
    {
        return FlattenTree(tv.Nodes);
    }

    public static IEnumerable<TreeNode> FlattenTree(this TreeNodeCollection coll)
    {
        return coll.Cast<TreeNode>()
                    .Concat(coll.Cast<TreeNode>()
                                .SelectMany(x => FlattenTree(x.Nodes)));
    }
}
Run Code Online (Sandbox Code Playgroud)