Файл: ...\Samples\Solution\OLE\Bldtree.scx
Элемент TreeView отображает коллекцию объектов Node (узел), каждый из которых состояит из метки и необязательной картинки (bitmap). После создания объекта TreeView мы можете добавлять, удалять, перемещать и совершать прочие операции на объектами Node путем установки свойств и вызова методов.
Этот пример показывает добавление узлов в элемент TreeView, удаление узлов, выбор узлов программным способом, запись иерархии TreeView в таблицу и чтение иерархии TreeView из таблицы.
Добавление узлов
Каждому узлу в TreeView необходимо присвоить уникальный ключ, который представляет собой символьную строку, генерируемую методом NewKey в этой примерной форме.
Скопировать код | |
|---|---|
*метод NewKey cKey = THIS.cNextKey THIS.cNextKey = ALLTRIM(STR(VAL(THIS.cNextKey) + 1) + "_") RETURN cKey | |
Для добавления новый узлов TreeView используется метод Add. Программный код, ассоциированный с событием Click командной кнопки cmdNewNode добавляет узел корневого уровня, используя метод Add.
Скопировать код | |
|---|---|
o = THISFORM.oleTree o.Nodes.Add(,1,THISFORM.NewKey(),"Click to edit text",0) | |
Программный код, ассоциированный с событием Click командной кнопки cmdNewChild добавляет узел, являющийся дочерним, по отношении к выбранному узлу.
Скопировать код | |
|---|---|
o = THISFORM.oleTree IF !ISNULL(o.SelectedItem) THEN o.Nodes.Add(o.SelectedItem.Key, 4, THISFORM.NewKey(), "Click to edit text",0) ENDIF | |
Удаление узлов (Nodes)
Вы можете удалить все узлы, вызвав метод Clear.
Скопировать код | |
|---|---|
THISFORM.oleTree.Nodes.Clear | |
Или вы можете удалить конкретные выбранные узлы, вызвав метод Remove. Помните, что при удалении узла, имеющего дочерние узлы, последние будут также удплены.
Скопировать код | |
|---|---|
THISFORM.oleTree.Nodes.Remove(THISFORM.oleTree.SelectedItem.Key) | |
Запись и чтение иерархии в таблицы
Для сохранения иерархии вашего TreeView в таблицу, с тем, чтобы вы могли перезагрузить ее в дерево и редактировать, пройдите последовательно все узлы в объекте TreeView и запишите ключ, родительский ключ и текст метки в соответствующие поля таблицы.
Скопировать код | |
|---|---|
FOR i = 1 TO loNodes.Count
IF ISNULL(loNodes.Item(i).Parent)
lcParent = "0_" && Root
ELSE
lcParent = loNodes.Item(i).Parent.Key
ENDIF
INSERT INTO (lcDBFName) VALUES ;
(loNodes.Item(i).Key, ;
lcParent, ;
loNodes.Item(i).Text)
ENDFOR | |
Для восстановления иерархии дерева TreeView, просканируйте записи в таблице, используя родительский ключ, клю и текст метки, которые вы сохранили в ней ранее.
Скопировать код | |
|---|---|
* Заполнить объект TreeView значениями из таблицы.
o = THISFORM.oleTree.Nodes
SCAN
IF ALLTRIM(parent) = '0_'
o.add(,1,ALLTRIM(key),ALLTRIM(text),0)
ELSE
o.add(ALLTRIM(parent),4,ALLTRIM(key), ALLTRIM(text),0)
ENDIF
THISFORM.cNextKey = ALLTRIM(STR(VAL(key) + 1) + "_")
ENDSCAN | |