Изучение компонента TTreeView, часть I
Относительные методы позиционирования
Для позиционирования на 1-м корневом узле надо использовать метод GetFirstNode:
TTreeNode* firstRoot = TreeView1->Items->GetFirstNode();
Т.к. все корневые узлы являются близнецами по отношению друг к другу, т.е. лежат на одном уровне, то для позиционирования на другом корневом узле можно использовать метод GetNextSibling. Следующий код добавляет в ListBox имена корневых узлов:
TTreeNode* rootNode = TreeView1->Items->GetFirstNode();
while ( rootNode )
{
ListBox1->Items->Add(rootNode->Text);
rootNode = rootNode->getNextSibling();
}
Метод GetPrevSibling позиционирует на предыдущем узле-близнеце в пределах своей группы узлов-близнецов, если эти методы не находят предыдущий или следующий узел, то возвращается NULL. Т.о. перед выполнением каких-либо манипуляций с узлов следует проверить его на NULL.
В дополнение к методам для работы с узлами-близнецами есть ещё четыре метода для работы с потомками узлов: getFirstChild, GetNextChild, GetPrevChild, и GetLastChild. Ниже два примера - в одном обход узлов идет сверху вниз, в другом наоборот:
TTreeNode* team = alEast->getFirstChild();
while ( team )
{
ListBox1->Items->Add(team->Text);
team = alEast->GetNextChild(team);
}
TTreeNode* team = alEast->GetLastChild();
while ( team )
{
ListBox1->Items->Add(team->Text);
team = alEast->GetPrevChild(team);
}
А вот здесь другой способ обхода:
if ( alEast->HasChildren )
{
ListBox1->Items-> Add("Here are the teams in the AL East:");
for ( int team = 0; team < alEast->Count;
team++ )
ListBox1->Items->
Add(" " + alEast->Item[team]->Text);
}
else
ListBox1->Items-> Add("There are no teams in the AL East!");