2012-03-05 2 views
8

Я использую Virtual List Tree для Delphi 2009. Я создал дерево с данными, такими как:Перебор узлов и ее Чайлдс и модифицируют данные

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

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

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

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

+2

Не подходит для данного конкретного вопроса, но также см. Метод 'IterateSubtree'. –

ответ

11

Вот как перебрать узлы верхнего уровня. Пожалуйста, обратите внимание (как 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; 
+2

Он почти работает :) Вместо GetNext мне нужно использовать GetNextSibling для итерации только над узлами верхнего уровня. Plz исправить это, чтобы я мог принять ваш ответ. И спасибо! :) –

+6

Но Jacek, ваш вопрос явно говорит, что вам нужно перебирать все узлы верхнего уровня * и их детей *. –

Смежные вопросы