c# - 在 TreeView.Nodes 集合中,C# 有一個用於搜索 TreeNode.Text 欄位的方法?

  显示原文与译文双语对照的内容
79 3

就像這個:


TreeNode[] treeNodes = treeView.Nodes.Find(searchString, true);



但我希望它在 text 欄位中而不是 name 欄位中搜索。

时间: 原作者:

91 0

我不知道任何內置方法,但是你可以使用 LINQ


TreeNode[] treeNodes = treeView.Nodes


. Cast<TreeNode>()


. Where(r => r.Text =="yourText")


. ToArray();



原作者:
62 2

要搜索所有樹節點( 不只是直接子節點),可以使用下面的擴展方法


var nodes = treeView1.FlattenTree()


. Where(n => n.Text =="sometext")


. ToList();



- -


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)));


 }


}



原作者:
114 4

下面的代碼僅顯示與搜索條件匹配的節點。

在搜索事件中複製以下代碼


 private void tbxSearch_KeyUp(object sender, KeyEventArgs e)


 {


 if (e.KeyCode == Keys.Enter)


 {


 trvMenu.BeginUpdate();


 if (tbxSearch.Text.Length> 0)


 {


 for (int i = trvMenu.Nodes.Count; i> 0 ; i--)


 {


 NodeFiltering(trvMenu.Nodes[i - 1], tbxSearch.Text);


 }


 }


 trvMenu.EndUpdate();


 }



然後創建 serch &過濾器函數


 private bool NodeFiltering(TreeNode Nodo,string Texto)


 {


 bool resultado = false;



 if (Nodo.Nodes.Count == 0)


 {


 if (Nodo.Text.ToUpper().Contains(Texto.ToUpper()))


 {


 resultado = true;


 }


 else


 {


 Nodo.Remove();


 }


 }


 else


 {


 for (int i = Nodo.Nodes.Count; i> 0; i--)


 {


 if (NodeFiltering(Nodo.Nodes[i - 1], Texto))


 resultado = true;


 }



 if (!resultado)


 Nodo.Remove();


 }



 return resultado;


 }



這段代碼很好地創建了許多級別的Treeview 菜單。

...