Форум - Ответы     (  К темам )
 ?  Вася: TreeView (28-11-2002 18:02:07)
Как из TreeView взять элементы (их названия), TreeView меняется время от времени

пример:

1-
-1а
-1б
2-
-2а

мне надо добавить в ListBox элементы Level=1, из 1, т.е. 1а,1б.
 Devnvd (29-11-2002 09:39:30)
TreeView очень вредный компонент. Он использует Windows'овский Tree-View Controls. У которого обязательно должен присутствовать корень(root).
То есть ваше дерево должно выглядеть так:
-0
-1
-1a
-1b
-2
-2a
В этом случае:
TTreeNode *root = TreeView1->Items->GetFirstNode();
AnsiString a1=root->Item[0]->Item[0]->Text;
AnsiString b1=root->Item[0]->Item[1]->Text;
AnsiString a2=root->Item[1]->Item[0]->Text;
Memo1->Lines->Add(a1+" "+b1+" "+a2);
 Владимир (29-11-2002 15:03:27) http://cbuilder.ru
Очень удобный компонент
, особенно для отражения и изменения иерархической информации, например из базы данных, и работать с ним достаточно удобно.

Компонент TTreeView имеет свойство Items - список узлов дерева.
Все узлы нашего компонента TTreeView - это объекты типа TTreeNode,
обладающие также своими свойставми и методами.
Названия элементов определяются свойством Text.


Итак выбираем из TreeView1 и загоняем их в ListBox1

ListBox1->Items->Clear();
AnsiString s;

// получаем все узлы первого уровня
TTreeNode *tn = TreeView1->Items->GetFirstNode();
while(tn){
ListBox1->Items->Add(tn->Text);
tn = tn->getNextSibling(); // получить следующий узел текущего уровня
}

ListBox1->Items->Add("---");

// получаем все дочерние узлы от узла tg
TTreeNode *tg = TreeView1->Items->GetFirstNode();
tn = tg->getFirstChild();
while(tn){
ListBox1->Items->Add(tn->Text);
tn = tn->getNextSibling();
}

// Разобрались ? Теперь можем написать получение, например,
// всех узлов первого уровня и их подузлов

ListBox1->Items->Add("--- All --- (Level1 + Level2)---");
tn = TreeView1->Items->GetFirstNode();
while(tn){ // получение узлов
ListBox1->Items->Add(tn->Text);
TTreeNode *tnsub = tn->getFirstChild();
while(tnsub){ // получение их подузлов
ListBox1->Items->Add(tnsub->Text);
tnsub = tnsub->getNextSibling();
}
ListBox1->Items->Add("");
tn = tn->getNextSibling();
}

//---
Есть удобные функции для сохранения - считывания дерева из файла:
TreeView1->SaveToFile("tr.txt"); // сохранить в файл
//---
TreeView1->LoadFromFile("tr.txt"); // считывем из файла
TreeView1->FullExpand(); // раскрыть все узлы


так что пробуйте, чего не понятно - спрашивайте...


support@cbuilder.ru