Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Компонент отображения дерева данных — TreeView



Компонент TreeView (страница Win32) служит для отображения иерархических данных в виде дерева, в котором пользователь может выбрать нужный ему узел или узлы.

Основным свойством TreeView, содержащим информацию об узлах дерева, является Items. Доступ к информации об отдельных узлах осуществляется через свойство Items[int Index]. Например, TreeViewl‑ > Items-> Item[0] — это узел дерева с индексом 0 (первый узел дерева). Каждый узел является объектом типа TTreeNodes, обладающим своими свойствами и методами (см.ниже).

Есть два способа формирования дерева: в окне редактора узлов дерева и программно.

I способ

Используется во время проектирования. Вызов окна редактора узлов производится двойным щелчком на компоненте TreeView или нажатием кнопки с многоточием около свойства Items в окне Инспектора Объектов.

Назначение кнопок окна редактора узлов

New Item (новый узел) позволяет добавить в дерево новый узел. Он будет расположен на том же уровне, на котором расположен узел, выделенный курсором в момент щелчка на кнопке New Item.

New Subltem (новый дочерний узел) позволяет добавить в дерево дочерний узел. Он будет расположен на уровень ниже уровня того узла, который выделен курсором в момент щелчка на кнопке New Subltem.

Delete (удалить) удаляет выделенный узел дерева.

Load позволяет загрузить структуру дерева из файла. Файл, хранящий структуру дерева это обычный текстовый файл, содержащий тексты узлов. Уровни узлов обозначаются отступами. Например, файл дерева и может иметь вид:

 

 

производство

цех 1

цех 2

цех 3

управление

администрация

бухгалтерия

II способ

Дерево можно формировать или перестраивать и во время выполнения приложения. Для этого служит ряд методов объектов типа TTreeNodes. Следующие методы позволяют вставлять в дерево новые узлы:

Add( Node, S) Добавляет новый узел с текстом S как последний узел уровня, на котором расположен Node.
AddFirst( Node, S) Вставляет новый узел с текстом S как первый из узлов уровня, на котором находится Node. Индексы последующих узлов увеличиваются на 1.
Insert(Node, S) Вставляет новый узел с текстом S сразу после узла Node на то же уровень. Индексы последующих узлов увеличиваются на 1.
AddChiId( Node, S) Добавляет узел с текстом S как последний дочерний узла Node.
AddChiIdFirst(Node, S) Вставляет новый узел с текстом S как первый из дочерних узлов узла Node. Индексы последующих узлов увеличиваются на 1

Например:

//вставить на место выделенного, остальные сдвигаются //вниз:

TreeView1-> Items-> Insert (TreeView1-> Items->

Item[TreeView1-> Selected-> AbsoluteIndex], " " );

//Вставить нулевым на тот же уровень, что и выделенный:

TreeView1-> Items-> AddFirst (TreeView1-> Items->

Item[TreeView1-> Selected-> AbsoluteIndex], " " );

//Добавляет новый узел как последний узел уровня, на //котором расположен выделенный:

TreeView1-> Items-> Add (TreeView1-> Items->

Item[TreeView1-> Selected-> AbsoluteIndex], " " );

Каждый из этих методов возвращает вставленный узел. Ниже в качестве примера приведен код, формирующий дерево, которое вы можете видеть на рис.1

Рис.1

TreeViewl-> Items-> Clear(); // очистка списка

// добавление корневого узла " производство" (индекс 0)

TreeViewl-> Items-> Add(NULL, " Мои рисунки" );

/* добавление дочених узлов " цех 1" - " цех 3"

(индексы 1-3) */

TreeViewl-> Items-> AddChiId(TreeViewl-> Items-> Item[0], " Мореходы" )

TreeViewl-> Items-> AddChild(TreeViewl-> Items-> Item[0], " Художник Васильев" )

TreeViewl-> Items-> AddChild(TreeViewl-> Items-> Item[0], " Фото ВОВ" )

Добавим программно ещё один узел «Тексты» с подузлами «Биографии» и «Пояснения»:

Рис.2

/* добавление корневого узла " Тексты" после узла " Мои рисунки" (индекс 4) */

TreeViewl-> Items-> Add(TreeViewl-> Items-> Item[0], " Тексты"

/* добавление дочених узлов " Биографии" и " Поясненияё" узла " управление" */

TreeViewl-> Items-> AddChild(TreeViewl-> Items-> Item[4], " Биографии" );

TreeViewl-> Items-> AddChild(TreeViewl-> Items-> Item[4], " Пояснения" );

Дерево может быть сколь угодно разветвленным. Например, следующие операторы добавляют дочерние узлы «Крузенштерн» и «Лисянский» в сформированный ранее узел «Мореходы»:

TreeViewl-> Items-> AddChild(ТreeViewl-> Items-> Item[l], " Крузенштерн" );

TreeViewl-> Items-> AddChiId(TreeViewl-> Items-> Item[l], " Лисянский" );

Рис.3

TTreeNode *Node=TreeView1-> Selected;

int level=Node-> Level; //Определяем уровень выделенного узла

int ind=Node-> Index; //Идекс выделенного узла внутри уровня

TreeViewl-> Items-> Item[l]-> Text; // Текст, связанный с узлом 1

 

Для удаления узлов имеется два метода: Clear(void), очищающий все дерево, и Delete(TTreeNode* Node), удаляющий указанный узел Node и все его узлы — потомки.

Например, оператор

TreeViewl-> Items-> Clear(); /*удалит в нашем примере все узлы*/

TreeViewl-> Items-> Delete(TreeViewl-> Items-> Item[l]); /*удалит узел «Мореходы» и его дочерние узлы*/

Для редактирования текста выделенного узла есть метод:

TreeView1-> Selected-> EditText();

Его можно вставить, например, в обработку события OnDblClick

Вызов контекстного меню правой клавишей мышки.

TreeView1-> PopupMenu = PopupMenu1;


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-08; Просмотров: 1515; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.019 с.)
Главная | Случайная страница | Обратная связь