Как я могу скрыть узел TVirtualStringTree? - PullRequest
4 голосов
/ 23 августа 2011

если я не ошибаюсь, невозможно иметь невидимые узлы в древовидном представлении TVirtualStringTree, так как для этого нет включенных, видимых или других свойств.Прав ли я в этом?

Если да, как мне удалось создать невидимый узел?

Структура моего дерева:

  • OneУзел
  • Другой узел
    • Подузел 1
    • Подузел 2
    • ...
    • Подузел15
    • подузел 16 (который не виден!)
  • еще один узел
    • подузел1 от еще одного узла
    • подузел 2 от еще одного узла

Я могу найти подузел 16, когдаЯ делаю цикл FirstNode / GetNextNode по всему дереву и позволяю распечатать текст для первого столбца.Я также могу осмотреть узел и увидеть, что у него есть предыдущий брат, но нет следующего брата, например, и высота узла равна 18.

Так как я это сделал?

Ответы [ 2 ]

22 голосов
/ 23 августа 2011

если я не ошибаюсь, невозможно иметь невидимые узлы в древовидной структуре TVirtualStringTree, так как для этого нет включенных, видимых или других свойств. Я прав насчет этого?

Вы не правы, возможно иметь как невидимые, так и отключенные узлы. Для переключения видимого состояния узла используйте

vtree.IsVisible[Node] := boolean;

чтобы включить / отключить использование узла

vtree.IsDisabled[Node] := boolean;

Вы также можете инициализировать узел в отключенном состоянии в событии OnInitNode дерева, добавив параметр ivsDisabled к InitialStates.

1 голос
/ 25 августа 2011

В дополнение к ответу Айнс, чтобы рекурсировать дерево, вы можете использовать следующие функции:

Для рекурсии ВСЕХ узлов

Tree.GetFirst();
Tree.GetNext();
Tree.GetPrevious();

Для рекурсии только видимых узлов:

Tree.GetFirstVisible();
Tree.GetNextVisible();
Tree.GetPreviousVisible();
...