- •Модуль 3. Лекція 12. Дерева
- •1. Дерево як абстрактна структура даних
- •2. Обхід дерева в глибину (dfs - Depth-First Search)
- •3. Обхід дерева в ширину. Алгоритм Breath-First-Search (bfs)
- •4. Елемент управління TreeView у Windows Form
- •4.1. Створення дерева TreeView з використанням вікна властивостей
- •4.2. Програмне створення дерева і робота з ним
- •Спочатку потрібно створити форму і розмістити на ній елемент TreeView.
- •Написати метод формування дерева. Метод викликати з конструктора чи з методу Load.
- •Обхід дерева.
- •Видалення вузла.
- •Додавання (вставка) вузлів
- •Робота з листями дерева.
Видалення вузла.
Додамо на форму кнопку Видалити вузол. Видаляти будемо вибраний вузол (властивість SelectedNode).
private void btnRemoveNode_Click(object sender, EventArgs e)
{
//Видалити вузол
TreeNode node= treeView1.SelectedNode;
treeView1.Nodes.Remove(node); //видалення node
}
Додавання (вставка) вузлів
При додаванні вузлів можливі 2 підходи:
Вставити конкретний вузол до визначеного вузла. Наприклад, додати до вузла Групи нову групу К-61. Ця дія подібна до додавання вузлів дерева у методі CreateTree.
Вставити довільний вузол в довільне місце дерева. Цей підхід потребує створення полів для введення назви поля (Text) і його ідентифікатора (Name). Цей підхід є універсальним, а вставка виконується для виділеного вузла.
Реалізуємо другий підхід. Для цього розмістимо на формі елемент управління GroupBox з назвою Додавання вузла, в якому розмістимо 2 підписи, 2 текстові поля і кнопку Додати вузол.
Призначимо назви елементам управління:
txtNameNode |
Поле для властивості Name вузла |
txtTextNode |
Поле для властивості Text вузла |
btnAddNode |
Властивість Name для кнопки |
В обробнику кнопки Додати вузол Реалізуємо додавання нового під-вузла до виділеного вузла.
private void btnAddNode_Click(object sender, EventArgs e)
{
//Додати новий вузол до виділеного
//Знаходимо виділений вузол
TreeNode SelectNode = treeView1.SelectedNode;
// перевіряємо, чи введені дані в поля
if ((txtNameNode.Text.Length != 0) & (txtTextNode.Text.Length != 0))
{
//Вставляємо підвузол до виділеного вузла
SelectNode.Nodes.Add(txtNameNode.Text, txtTextNode.Text);
}
else
MessageBox.Show("Вузол не може бути пустм");
//Очистка текст.полів
txtNameNode.Text = " ";
txtTextNode.Text = "";
SelectNode.Expand(); // робимо вузол видимим на дереві
}
Інший спосіб додавання вузла наведено тут:
https://codeby.net/threads/kak-dinamicheski-dobavit-uzel-v-treeview.65590/
Робота з листями дерева.
В нашому прикладі реалізуємо такий функціонал для роботи з листям (кінцевими вузлами, які не маєть нащадків). При виборі групи у список ListBox виводиться список прізвищ групи.
Створимо списки прізвищ груп з використанням колекції List<>.
//Списки студентів
List<string> listK71 = new List<string>();
listK71.Add("Зайченко Артем");
listK71.Add("Костюк Євгеній");
listK71.Add("Кузнєцов Дмитро");
List<string> listPI71 = new List<string>();
listPI71.Add("Данилов Олександр");
listPI71.Add("Коваленко Сергій");
listPI71.Add("Кравченко Дмитро");
Додамо на форму список ListBox. Його властивості Name призначимо listStudent. Для заповнення списку скористаємося прив’язкою:
listStudent.DataSource = listPI71;
Напишемо обробник події AfterSelect, яка спрацьовує після вибору вузла дерева.
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
//Обробник події, яка генерується після вибору вузла
//Списки студентів
List<string> listK71 = new List<string>();
listK71.Add("Зайченко Артем");
listK71.Add("Костюк Євгеній");
listK71.Add("Кузнєцов Дмитро");
List<string> listPI71 = new List<string>();
listPI71.Add("Данилов Олександр");
listPI71.Add("Коваленко Сергій");
listPI71.Add("Кравченко Дмитро");
//Вибір виділеного вузла і виведення в ListBox списку групи
TreeNode node = treeView1.SelectedNode;
if (node.Name== "PI71")
listStudent.DataSource = listPI71;
if (node.Name == "К71")
listStudent.DataSource = listK71;
}
https://metanit.com/sharp/windowsforms/4.13.php