Winform Treeview按标签查找节点

use*_*103 12 c# treeview search winforms

我有一个树视图,显示成员可能有重复,标签不会.例:

TreeNode node = new TreeNode(itemName);
node.Tag = itemID; //unique ID for the item
treeView1.Nodes.Add(node);
Run Code Online (Sandbox Code Playgroud)

因此,在搜索时,我知道我可以使用itemName搜索

treeView1.Nodes.Find(itemName, true);
Run Code Online (Sandbox Code Playgroud)

但是我怎么能通过标签搜索呢?treeView1.Nodes.Where没有定义,所以对我来说没有linq :(

有关如何按标签搜索的任何建议?:) 谢谢!

Kin*_*ing 20

试试这个:

var result = treeView1.Nodes.OfType<TreeNode>()
                            .FirstOrDefault(node=>node.Tag.Equals(itemID));
Run Code Online (Sandbox Code Playgroud)

注意:因为您说您itemID的独特之处,所以您可以使用它FirstOrDefault来搜索唯一的项目.如果没有找到result它将是null.

UPDATE

要搜索所有级别的所有节点,您可以尝试使用一些递归方法,如下所示:

public TreeNode FromID(string itemId, TreeNode rootNode){
   foreach(TreeNode node in rootNode.Nodes){
     if(node.Tag.Equals(itemId)) return node;
     TreeNode next = FromID(itemId, node);
     if(next != null) return next;
   }
   return null;
}
//Usage    
TreeNode itemNode = null;
foreach(TreeNode node in treeView1.Nodes){
  itemNode = FromID(itemId, node);
  if(itemNode != null) break;
}
Run Code Online (Sandbox Code Playgroud)