елемент treeview

Отже, почнемо з того, що таке TreeView?

Відкрийте Explorer (якщо у вас звичайно Windows :) - зліва, як ви здогадалися, TreeView, а праворуч, ListView (це я так просто говорю). Елемент TreeView забезпечує засоби зберігання ієрархічно структурованих даних Для зберігання малюнків (таких як папка, прапор Віндов для невизначеного типу файлів і т.п.) використовується елемент ImageList - робота з ним досить проста, і торкатися цієї теми поки не будемо ...

Відкриємо нову форму і створимо елемент TreeView, який знаходиться в контролі MS Windows Common Controls. Створимо також CommandButton, в подію Click якого ми і будемо все описувати.

Для початку теорія. У цьому елементі реалізована структура даних, відома як дерево, а кожен елемент дерева називається вузлом (node). Верхній вузол дерева називають кореневим вузлом (root node), а вузли нижче - дочірніми вузлами (child nodes). Розглянемо це на структурі Інтернету: домен ru - кореневий вузол, а домен narod для ru - дочірній вузол. Домен narod для домену soobcha-vb - є батьківським. З цим я думаю все зрозуміло.

Тепер подивимося властивості елемента TreeView - щоб він виглядав як провідник - треба поставити значення Style рівне 7, а LineStyle - 0. Там ще багато властивостей, і я думаю все їх описувати не потрібно - багато хто з них стандартні.

Тепер перейдемо у вікно коду і наберемо TreeView1.Nodes, а далі поставимо крапку. Побачили: в сімейство Nodes входять 5 компонентів, з якими і належить нам працювати. Почнемо з основного і найбільш складного Add.

Зробимо кореневої вузол:

TreeView1.Nodes.Add. "Internet", "Internet"

Запустимо програму, і натиснемо НЕ кнопку - побачили? - да, з'явився вузол Інтернет. Але поки нічого не зрозуміло, навіщо стільки ком, і два "Інтернету". Давайте продовжимо створювати вузли і все стане зрозуміло! введемо:

TreeView1.Nodes.Add "Internet", tvwChild, "ru", "ru"

Ввели, а тепер натискаємо на старт, і на кнопку, і якщо ви все акуратно ввели, чи взято звідси, то з'явилася помилка. Починаємо розбиратися: що ж ми хотіли зробити? - створити дочірній вузол ru до кореневого Internet - на це вказує значення tvwChild - я думаю, воно зрозуміло. Але звідки помилка? Після цього ми все ввели правильно, адже перший рядок працювала. Залишилося одне значення - Internet. Ну здогадалися? Саме, в першому рядку, якщо ви уважно стежили за роботою програми, в TreeView з'явилося Internet (з великої літери), а internet (з маленької), це всього лише ключ. І в другому рядку ми вказуємо не пряме ім'я, а ключ цього імені, тобто internet. Виправимо, запустимо, клацнемо подвійним кліком на Internet - і, ось він, дочірній вузол ru. Створимо відповідно ще пару доменів 1 рівня:

TreeView1.Nodes.Add "internet", tvwChild, "com", "com"
TreeView1.Nodes.Add "internet", tvwChild, "net", "net"
TreeView1.Nodes.Add "internet", tvwChild, "edu", "edu"

Ви не набридло весь час клацати але Internet, так? - ну введемо:

Складно - а хто говорив що просто? Ось ми частково познайомилися з компонентом Item. Ну додамо ще пару дочірніх вузлів до ru, тут вже все зрозуміло - ви і самі можете зробити це.

'Слідуючи від дочірнього вузла до батьківського ви потрапите на сайт Народ.ру
TreeView1.Nodes.Add "ru", tvwChild, "narod", "narod"
TreeView1.Nodes.Add "narod", tvwChild, "www", "www"

А слідуючи звідси, потрапите на сайт звідки ви це читаєте

TreeView1.Nodes.Add "narod", tvwChild, "soobcha-vb", "soobcha-vb"
TreeView1.Nodes.Add "ru", tvwChild, "boom", "boom"
TreeView1.Nodes.Add "ru", tvwChild, "lgg", "lgg"

Тепер зробимо шлях до іншого сайту безкоштовного хостингу - www.boom.ru Всі напевно введуть

TreeView1.Nodes.Add "boom", tvwChild, "www", "www"

І знову помилка! Просто ви вже звикли, що ключ збігається (у всякому разі за значенням - пам'ятаєте історію з регістром?). Але ж не може бути два однакових ключа - як тоді додавати дочірні вузли. У зв'язку з цим необхідно користуватися "повним" шляхом до вузла, тобто для ru - це було б internet-ru, для www.narod.ru - internet-ru-narod-www. тут
збігів бути не може. Переваги і того і іншого варіанту ви зрозумієте з часом: якщо ви впевнені, що будуть відсутні два вузла з однаковими іменами (хоча таке буває рідко), то має сенс залишити початковий варіант, а будь-якому іншому випадку необхідно використовувати "повний" шлях. Отримали ось такий код:

TreeView1.Nodes.Add. "Internet", "Internet"
TreeView1.Nodes.Add "internet", tvwChild, "internet-ru", "ru"
TreeView1.Nodes.Add "internet", tvwChild, "internet-com", "com"
TreeView1.Nodes.Add "internet", tvwChild, "internet-net", "net"
TreeView1.Nodes.Add "internet", tvwChild, "internet-edu", "edu"
TreeView1.Nodes.Item ( "internet"). Expanded = True
TreeView1.Nodes.Add "internet-ru", tvwChild, "internet-ru-narod", "narod"
TreeView1.Nodes.Add "internet-ru-narod", tvwChild, "internet-ru-narod-www", "www"
TreeView1.Nodes.Add "internet-ru-narod", tvwChild, "internet-ru-narod-soobcha-vb", "soobcha-vb"
TreeView1.Nodes.Add "internet-ru", tvwChild, "internet-ru-boom", "boom"
TreeView1.Nodes.Add "internet-ru-boom", tvwChild, "internet-ru-boom-www", "www"
TreeView1.Nodes.Add "internet-ru", tvwChild, "internet-ru-lgg", "lgg"
TreeView1.Nodes.Add "internet-ru-lgg", tvwChild, "internet-ru-lgg-www", "www"

Важкувато, на перший погляд - але ж ми отримали таку складну структуру ...
Тепер поговоримо про інші компоненти Nodes: Count - повертає число вузлів сімейства Nodes. введемо:

У нас з'явиться у віконці кількість вузлів - в даному випадку 12.

Ви випадково не разу не натискали на вашу кнопку ще раз - правильно з'являється помилка, тому що ключі вже все створені, і такі значення вже є. Поставте на початку:

І перед додаванням нових значень TreeView буде повністю очищатися. А якщо в процесі роботи програми треба видалити вузол? - правильно треба скористатися командою Remove:

'Видаляємо вузол ru, який ми так довго створювали.
TreeView1.Nodes.Remove ( "internet-ru")

А тепер трохи про картинках:

TreeView1.Nodes.Add "internet", tvwChild, "internet-org", "org", App.Path "\ Pic1.bmp", App.Path "\ Pic1sel.bmp"

Таким чином показується картинка, що знаходяться в папці, де у вас збережена це програма (або ви її ще не зберігали?), І з ім'ям pic1.bmp, і якщо вузол обраний, то з ім'ям pic1sel.bmp. Просто так? А ось те ж саме тільки і використанням ImageList (він знаходиться в MS Windows Common Controls-2):

ImageList1.ListImages.Add. LoadPicture (App.Path "\ Pic1.bmp")
ImageList1.ListImages.Add. LoadPicture (App.Path "\ Pic1sel.bmp")
TreeView1.ImageList = ImageList1
TreeView1.Nodes.Add "internet", tvwChild, "internet-org", "org", 1, 2

Номери присвоюються по порядку, але можна і ставити ключ. Набагато довше, але якщо ви хочете зробити малюнки для своїх папок, а їх 100 штук, то невже ви кожен раз будете прописувати шлях до файлу? Ну ось ми всюди пишемо tvwChild, а невже не можна по іншому? Може я хочу вставити слідом або до деякого вузла новий - немає проблем.

TreeView1.Nodes.Add "internet-com", tvwNext, "internet-tv", "tv"

Додасть після домену com - домен tv, а якщо перед - правильно:

TreeView1.Nodes.Add "internet-com", tvwPrevious, "internet-su", "su"

Теж саме, тільки перед і домен su.

А хочете першим поставити новий вузол:

TreeView1.Nodes.Add "internet-com", tvwFirst, "internet-to", "to"

TreeView1.Nodes.Add "internet-com", tvwLast, "internet-med", "med"

Ось і закінчилися варіанти ...

Тут я навів лише опис TreeView, методи ж роботи з ним, такі як пошук, збереження, завантаження, набагато складніше.

Схожі статті