|
TreeView
|
|||
---|---|---|---|
#18+
Скажите пожалуйста как пользоваться TreeView? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2004, 16:46 |
|
TreeView
|
|||
---|---|---|---|
#18+
Пример. (писал не я, но все понятно). Итак, начнем с того, что такое 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, да? - ну введем: TreeView1.Nodes.Item("internet").Expanded = True Сложно - а кто говорил что просто? Вот мы частично познакомились с компонентом 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" Теперь сделаем путь к другому сайту бесплатного хостинга - http://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. Введем: MsgBox TreeView1.Nodes.Count У нас появится в окошке количество узлов - в данном случае 12. Вы случайно не разу не нажимали на вашу кнопку ещё раз - правильно появляется ошибка, т.к. ключи уже все созданы, и такие значения уже имеются. Поставьте в начале: TreeView1.Nodes.Clear И перед добавлением новых значений 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, методы же работы с ним, такие как поиск, сохранение, загрузка, намного сложнее. Максим. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2004, 20:02 |
|
TreeView
|
|||
---|---|---|---|
#18+
А как проверить по ключу существует ли элемент или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2007, 16:18 |
|
TreeView
|
|||
---|---|---|---|
#18+
написал сам, но что-то мне подсказывает, что есть проще метод :) Function ftr(a) As Boolean Dim nodess As Node frt = False For Each nodess In Me.TV.Nodes If TV.Nodes.Item(nodess.Key).Key = a Then ftr = True Next End Function ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2007, 16:53 |
|
TreeView
|
|||
---|---|---|---|
#18+
Ну зачем же все-то перебирать? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2007, 17:02 |
|
TreeView
|
|||
---|---|---|---|
#18+
MelkiadesНу зачем же все-то перебирать? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Мда, это проще, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2007, 17:59 |
|
TreeView
|
|||
---|---|---|---|
#18+
Как прописать событие на TV правой кнопки, что б появилось контексное меню ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2007, 10:54 |
|
TreeView
|
|||
---|---|---|---|
#18+
Разве у TreeView нет событий MouseDown и MouseUp? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2007, 11:07 |
|
TreeView
|
|||
---|---|---|---|
#18+
Ламер ЛамеровичРазве у TreeView нет событий MouseDown и MouseUp? Есть то оно есть, только когда я обрабатываю MouseDown елемент на котором стоит курсор не выберается. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2007, 09:02 |
|
TreeView
|
|||
---|---|---|---|
#18+
konstsu Ламер ЛамеровичРазве у TreeView нет событий MouseDown и MouseUp? Есть то оно есть, только когда я обрабатываю MouseDown елемент на котором стоит курсор не выберается.Дык выберите, есть же HitTest. авторHitTest Method (ListView, TreeView Controls) Returns a reference to the ListItem object or Node object located at the coordinates of x and y. Most often used with drag-and-drop operations to determine if a drop target item is available at the present location. Syntax object.HitTest (x As Single, y As Single) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2007, 13:58 |
|
TreeView
|
|||
---|---|---|---|
#18+
Подскажите, уважаемые, как подсчитать количство детей в treeView? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2010, 11:17 |
|
TreeView
|
|||
---|---|---|---|
#18+
VlaiusПодскажите, уважаемые, как подсчитать количство детей в treeView? Nodes.Count ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2010, 11:37 |
|
TreeView
|
|||
---|---|---|---|
#18+
VlaiusПодскажите, уважаемые, как подсчитать количство детей в treeView?У "дети" есть у отдельной ветки, у всего дерева — "узлы". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2010, 12:33 |
|
TreeView
|
|||
---|---|---|---|
#18+
Подскажите какой командой внутри родительского каталога переключаться между детьми? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 22:35 |
|
|
start [/forum/topic.php?fid=60&msg=34303162&tid=2155509]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
71ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 181ms |
0 / 0 |