14

表示メンバーが重複している可能性があり、タグが重複していないツリービューがあります。例:

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

したがって、検索するときは、 itemName を使用して検索できることを知っています

treeView1.Nodes.Find(itemName, true);

しかし、タグを介して検索するにはどうすればよいでしょうか? treeView1.Nodes.Where の定義がないため、linq はありません:(

タグで検索する方法について何か提案はありますか? :) ありがとうございました!

4

4 に答える 4

20

これを試して:

var result = treeView1.Nodes.OfType<TreeNode>()
                            .FirstOrDefault(node=>node.Tag.Equals(itemID));

:あなたitemIDはユニークだと言ったのでFirstOrDefault、ユニークなアイテムを検索するために使用できます. 見つからない場合はresultになりますnull

アップデート

すべてのレベルですべてのノードを検索するには、次のような再帰的な方法を試してみてください。

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;
}
于 2013-10-07T14:07:30.687 に答える