【问题标题】:Highlighting a TreeNode without using foreach, possible with LINQ?使用 LINQ 可以在不使用 foreach 的情况下突出显示 TreeNode?
【发布时间】:2011-11-30 22:11:50
【问题描述】:

我有一些只包含父节点的 TreeViews(如列表视图)。我有一个文本框,用户可以在其中输入文本,然后我想在树视图中突出显示与用户输入的文本相同的节点。目前我使用此代码:

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 对象。我想知道那里是否存在更好的代码!?

【问题讨论】:

    标签: c# linq treeview


    【解决方案1】:

    是的,你可以像这样使用 LINQ:

    treeView.Nodes.FirstOrDefault<TreeNode>(node => node.Text == text);
    

    如果未找到任何项目,您将获得 null。

    【讨论】:

    • 谢谢。嗯,如何将其转换为突出显示返回 tru 的节点的条件?!
    • @Sean87:我会这样做:treeView1.SelectedNode = treeView1.Nodes.OfType&lt;TreeNode&gt;().FirstOrDefault(node =&gt; node.Text == text); 这将选择包含文本的第一个节点或不选择任何节点。
    • 我试过答案中的代码,treeView.Nodes没有FirstOrDefault!?
    • @Sean87:哦,对不起,我忘了说你需要在源文件的顶部添加using System.Linq
    • 哦,那很奇怪,我添加了 using 语句,但 VS 仍然没有显示 .FirstOrDefault 方法。但是我在使用List&lt;&gt; 的东西时有这种方法。
    【解决方案2】:

    要获取包含该文本的所有项目,请执行以下操作:

    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;
    

    【讨论】:

      【解决方案3】:

      你可以这样试试

      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 的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-03
        • 2014-04-16
        • 2012-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多