2012-03-05 22 views
8

Tôi đang sử dụng List Tree ảo cho delphi 2009. Tôi đã tạo một cây với dữ liệu như:iterating trên nút và Childs và sửa đổi dữ liệu

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

Tôi muốn để lặp qua tất cả các yếu tố nhưng trong thứ tự cụ thể. Tôi cần phải có được nút cấp cao nhất đầu tiên, và sau đó lặp lại trên tất cả các con của nó và sửa đổi trường FPath. Khi tôi làm xong với các con của nó, tôi muốn có một nút cấp cao nhất khác, v.v.

Trước hết, tôi không biết cách lật đổ các nút cấp cao nhất.

Cảm ơn trước cho bất kỳ mẹo nào về số này

+2

Không thích hợp cho câu hỏi cụ thể này, nhưng cũng xem phương pháp 'IterateSubtree'. –

Trả lời

11

Đây là cách để lặp lại các nút cấp cao nhất. Xin lưu ý (như Smasher còn lại trong bình luận của mình) rằng các nút đang được khởi tạo nếu cần thiết bằng cách sử dụng GetFirstGetNextSibling điều gì có thể làm chậm quá trình lặp lại một chút. Tuy nhiên, bạn có thể sử dụng các hàm GetFirstNoInitGetNextNoInit (nếu bạn đã khởi tạo các nút) và bạn có thể có hiệu suất tốt hơn.

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

Nó gần như hoạt động :) Thay vì GetNext tôi cần sử dụng GetNextSibling để lặp qua các nút cấp cao nhất mà thôi. Plz chính xác điều này vì vậy tôi có thể chấp nhận câu trả lời của bạn. Và cảm ơn! :) –

+6

Nhưng Jacek, câu hỏi của bạn một cách rõ ràng nói rằng bạn cần phải lặp qua tất cả các nút cấp cao nhất * và con cái của họ *. –

Các vấn đề liên quan