Как узнать, что узел является корневым в Virtual TreeView? - PullRequest
3 голосов
/ 23 сентября 2019

Я использую Virtual Tree View.Есть ли надежный способ узнать, является ли узел корневым или нет?

Я пытаюсь использовать

if not Assigned(Node.Parent) then
  Output('This is root')
else
  Output('This is not root')

Но не работает.

Я пытаюсь использовать

if Node = tvItems.RootNode then
  Output('This is root')
else
  Output('This is not root')

Но тоже не работает.

1 Ответ

2 голосов
/ 23 сентября 2019

Конечный корневой узел в VTV (или VST) - это специальный невидимый узел, который действует как родительский для всех созданных пользователем корневых узлов (узлов, созданных с помощью parent = nil).Этот специальный невидимый узел имеет в своей конструкции свойства NextSibling и PrevSibling, указывающие на себя.

Чтобы определить, является ли узел корневым узлом (в смысле созданного пользователем корня), вы можете, например, сделать:

procedure TForm16.tvItemsNodeClick(Sender: TBaseVirtualTree;
  const HitInfo: THitInfo);
begin
  if HitInfo.HitNode.Parent.NextSibling = HitInfo.HitNode.Parent then
    Caption := 'Root node'
  else
    Caption := 'Not root node';
end;

В качестве альтернативы, как прокомментировал OP, без использования внутренних деталей реализации:

procedure TForm16.tvItemsNodeClick(Sender: TBaseVirtualTree;
  const HitInfo: THitInfo);
begin
  if HitInfo.HitNode.Parent = Sender.RootNode then
    Caption := 'Root node'
  else
    Caption := 'Not root node';
end;

Ссылка: свойство TBaseVirtualTree.RootNode (в справке)

...