Перебор узлов и их дочерних элементов и изменение данных - PullRequest
9 голосов
/ 05 марта 2012

Я использую Virtual Tree List для delphi 2009. Я создал дерево с такими данными, как:

type
  PTreeData = ^TTreeData;
  TTreeData = record
    FCaption: String;
    FPath: String;
  end;

Я хочу перебрать все элементы, но в определенном порядке.Мне нужно получить первый узел верхнего уровня, а затем перебрать все его дочерние элементы и изменить поле FPath.Когда я закончу с дочерними элементами, я хочу получить еще один узел верхнего уровня и т. Д.

Прежде всего, я не знаю, как перебирать узлы верхнего уровня.

Заранее благодарим за любые советы по этому вопросу

1 Ответ

11 голосов
/ 05 марта 2012

Вот как перебирать узлы верхнего уровня. Пожалуйста, обратите внимание (как Smasher оставил в своем комментарии), что узлы инициализируются, если необходимо, используя GetFirst и GetNextSibling, что может немного замедлить итерацию. Однако вы можете использовать функции GetFirstNoInit и GetNextNoInit (если у вас уже инициализированы узлы), и вы можете получить более высокую производительность.

procedure TForm1.Button1Click(Sender: TObject);
var
  Data: PTreeData;
  Node: PVirtualNode;
begin
  Node := VirtualStringTree1.GetFirst;
  while Assigned(Node) do
  begin
    Data := VirtualStringTree1.GetNodeData(Node);
    // here you can access your data
    Node := VirtualStringTree1.GetNextSibling(Node);
  end;
end;
...