突出显示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对象。我想知道是否有更好的代码存在!?

突出显示TreeNode而不使用foreach,可以使用LINQ

是的,你可以用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的解决方案。你应该试试渔民的方法。

相关文章: