Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C#_справочные сведения.doc
Скачиваний:
9
Добавлен:
26.04.2019
Размер:
384.51 Кб
Скачать

Урок 15. Продолжаем работать с TreeView

На этом уроке мы с вами посмотрим, как можно найти узел по его тексту.

Добавьте на форму программы, написанной на прошлом уроке, еще одну кнопку и тествое поле. Для кнопки задайте значение свойст Name и Text на find и Find соответственно, для тествого поля эти же свойства установите в findNode и пустую строку.

Теперь в обработчике нажатия на кнопку вставьте следующий код:

// Выделение узла по названию.

private void find_Click(object sender, System.EventArgs e)

{

// Снимаем выделение с дерева.

treeView1.SelectedNode = null;

// Ищем узел с определенным текстом.

TreeNode tn = FindNode(treeView1, findNode.Text);

// Если нашли,

if(tn!=null)

{

// то выделяем.

treeView1.SelectedNode = tn;

treeView1.Focus();

}

}

Как вы видите, тут мы используем метод FindNode, который ищет узел по его названию. Это наш метод, который мы еще не написали. Исправим это. Добавьте этот метод в класс формы:

// Поиск узла в дереве по названию.

private TreeNode FindNode(TreeView tv, string name)

{

// Ищем в узлах первого уровня.

foreach(TreeNode tn in tv.Nodes)

{

// Если нашли,

if(tn.Text==name)

{

// то возвращаем.

return tn;

}

}

// Ищем в подузлах.

TreeNode node;

foreach(TreeNode tn in tv.Nodes)

{

// Делаем поиск в узлах.

node = FindNode(tn, name);

// Если нашли,

if(node!=null)

{

// то возвращаем.

return node;

}

}

// Ничего не нашли.

return null;

}

Принцип действия метода FindNode такой - сначала просматриваем узлы верхнего уровня (корневые). Если нашли нужный узел, то его и возвращаем. Если не нашли узел среди корневых узлов, то просматриваем их еще раз - но на этот раз для каждого корневого узла вызываем метод FindNode (обратите внимание, что у него первым параметром идет не само дерево, а узел дерева), который ищет узел с заданным именем у конкретного узла дерева. Этот метод нам также предстоит написать - но уже на следующем уроке.

Урок 16. TreeView - окончание

С прошлого урока нам осталось написать метод FindNode, который ищет узел с определенным названием, принадлежащий некоторому подузлу.

Вот текст этого метода:

// Поиск подузла в узле по названию.

private TreeNode FindNode(TreeNode treenode, string name)

{

// Ищем в узлах первого уровня.

foreach(TreeNode tn in treenode.Nodes)

{

// Если нашли,

if(tn.Text==name)

{

// то возвращаем.

return tn;

}

}

// Ищем в подузлах.

TreeNode node;

foreach(TreeNode tn in treenode.Nodes)

{

// Делаем поиск в узлах.

node = FindNode(tn, name);

// Если нашли,

if(node!=null)

{

// то возвращаем.

return node;

}

}

// Ничего не нашли.

return null;

}

Этот метод - рекурсивный. Т. е. он вызывает сам себя - и это логично - сначала нужный подузел ищется среди подузлов только первого уровня. Если не нашли, то рекурсивно вызываем этот же метод для поиска в каждом подузле нашего узла. Если и там ничего не нашли, то возврящем null.

Запускаем программу. Если узел с искомым именем существует (а имя надо вводить, естественно, во второе текстовое поле), то он выделится в дереве:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]