• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Компонента 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);
}
 
Мы в соцсетях:

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