簡體   English   中英

如何將子樹從一個TTreeView復制到另一個?

[英]How can I copy a subtree from one TTreeView to another?

我想將所選節點及其所有后代從一個TTreeView復制到另一個節點。

實現這一目標的最佳,最有效的方法是什么?

遞歸執行此操作最簡單,如下所示:

procedure WalkChildren(Node: TTreeNode; List: TList<TTreeNode>);
var
  i: Integer;
begin
  List.Add(Node);
  for i := 0 to Node.Count-1 do begin
    WalkChildren(Node[i], List);
  end;
end;

像這樣稱呼它:

List := TList<TTreeNode>.Create;
WalkChildren(Root, List);

此示例添加到列表中,但您可以使用您選擇的某個替換該操作。

現在我們可以走一棵樹了,是時候一起走兩棵樹了。

procedure CopySubTree(Src, DestParent: TTreeNode; DestNodes: TTreeNodes);
var
  i: Integer;
  Dest: TTreeNode;
begin
  Dest := DestNodes.AddChild(DestParent, Src.Text);
  //copy other parameters from Src to Dest as you please
  for i := 0 to Src.Count-1 do begin
    CopySubTree(Src[i], Dest, DestNodes);
  end;
end;

你可以像這樣調用它:

CopySubTree(SrcTree.Selected, nil, DestTree.Items);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM