Компонента Ttreeview. Onexpanded(...) Не работает так как я думаю, под

  • Автор темы Raschet5
  • Дата начала
R

Raschet5

Гость
#1
Кратко : Нужно чтобы после раскрытия первого узла, все вложенные открывались автоматом. Прочёл умную работу по TTreeView из интернета и написал :

C++:
void __fastcall TForm1::Tree2Expanded(TObject *Sender, TTreeNode *Node)
{
//		Node->Expand(true);
TTreeNode* N;
N = Node;
while(N->HasChildren)
{
if (N->Expanded == false)
N->Expanded = true;
N = N->getFirstChild();
};
}
При выполнении выдаёт ошибку StackOverflow.
Троссирую и вижу, как только программа попадает на N->Expanded = true; после этого вместо следующей строки уходит на начало процедуры. Видимо, при выполнении этой строки происходит рекурсивный вызов процедуры. А мне то всего лишь и надо, чтобы при раскрытии первого элемента, все остальные вложенные разворачивались до последнего листа. А остальное дерево было свёрнуто. Видимо туплю, но мысли чего-то кончились. (С деревом ранее не работал). Ну и вобщем хелп. Где я накосячил?
 
R

Raschet5

Гость
#2
Есть возможность раскрывать всё дерево. Но мне нужно только выбранную ветку.
Есть возможность работать сразу по всей вложенной ветке. Это первое что сделал. Это как раз таки Node->Expand(true); Но результат тот же. Переполнение буфера.

Как включать и отключать реакцию на событие?
 
R

Raschet5

Гость
#4
Нашёл другое решение :

C++:
 void __fastcall TForm1::Tree2Click(TObject *Sender)
{
TTreeNode *Node;
Node = Tree2->Selected;
if (Node->Expanded == true)
Node->Expand(true);
}