Выделение TreeNode без использования foreach, возможно с LINQ? - PullRequest
1 голос
/ 30 ноября 2011

У меня есть несколько 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. Мне было интересно, существует ли лучший код там !?

Ответы [ 3 ]

5 голосов
/ 30 ноября 2011

Да, вы можете сделать это с помощью LINQ следующим образом:

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

Вы получите ноль, если предмет не найден.

1 голос
/ 30 ноября 2011

Вы можете попробовать вот так

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. Тогда вам стоит попробовать подход Фишермена.

1 голос
/ 30 ноября 2011

Чтобы получить все элементы, содержащие текст, выполните следующие действия:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...