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;