突出显示TreeNode而不使用foreach,可以使用LINQ
本文关键字:foreach 可以使 LINQ 显示 TreeNode | 更新日期: 2023-09-27 18:16:07
我有一些只包含父节点的TreeViews(如listview)。我有一个文本框,用户可以输入一个文本,然后我要突出显示节点在treeview,其中有相同的文本输入的用户。现在我使用以下代码:
strring text = textBox.Text.Trim(); //the text entered by user
foreach(TreeNode node in treeView.Nodes)
{
if(node.Text == text) node.BackColor == Color.Green;
}
我讨厌为每个treeview写每个。有没有一种简单的方式来表达,例如:
if(treeView.Nodes.Contains(text)) //do stuff
Nodes.Contains()
只接受TreeNode对象。我想知道是否有更好的代码存在!?
是的,你可以用LINQ这样做:
treeView.Nodes.FirstOrDefault<TreeNode>(node => node.Text == text);
要获取包含文本的所有项,请执行如下操作:
IEnumerable<TreeNode> foundItems =
from TreeNode node in tree.Nodes
where node.Text.Contains(searchString) select node;
或自动选择第一次出现:
TreeNode firstNodeWithText = (from TreeNode node in tree.Nodes
where node.Text.Contains(searchString) select node).FirstOrDefault<TreeNode>();
tree.SelectedNode = firstNodeWithText;
你可以这样试试
string text = textBox.Text.Trim(); //the text entered by user
foreach(TreeNode node in treeView.Nodes
.Cast<TreeNode>()
.Where(x=>x.Text == text))
node.BackColor == Color.Green;
但是,正如您所看到的,它并没有比您的代码更短。
PS我刚刚意识到你想要一个不使用foreach的解决方案。你应该试试渔民的方法。