• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

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

Raschet5

Кратко : Нужно чтобы после раскрытия первого узла, все вложенные открывались автоматом. Прочёл умную работу по 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

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

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

Raschet5

Нашёл другое решение :

C++:
 void __fastcall TForm1::Tree2Click(TObject *Sender)
{
TTreeNode *Node;
Node = Tree2->Selected;
if (Node->Expanded == true)
Node->Expand(true);
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!