我有一些只包含父节点的TreeView(如listview)。我有一个文本框,用户可以在其中输入文本,然后我想突出显示树视图中的节点,该节点具有用户输入的相同文本。目前我使用此代码:
strring text = textBox.Text.Trim(); //the text entered by user
foreach(TreeNode node in treeView.Nodes)
{
if(node.Text == text) node.BackColor == Color.Green;
}
我讨厌为每个树视图编写foreach。有一个简单的方法可以说:例如:
if(treeView.Nodes.Contains(text)) //do stuff
Nodes.Contains()
只接受TreeNode对象。我想知道是否存在更好的代码!?
答案 0 :(得分:5)
是的,您可以使用LINQ这样做:
treeView.Nodes.FirstOrDefault<TreeNode>(node => node.Text == text);
如果没有找到任何项目,您将获得null。
答案 1 :(得分:1)
要获取包含文本的所有项目,请执行以下操作:
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;
答案 2 :(得分:1)
您可以尝试这样
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的解决方案。你应该尝试Fischermen的方法。