Файл: ...\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 |