【发布时间】:2011-08-23 11:43:41
【问题描述】:
我想将所选节点及其所有后代从一个 TTreeView 复制到另一个。
实现这一目标的最佳、最有效的方法是什么?
【问题讨论】:
-
我不完全了解您要做什么...如果您只想要所选节点的子节点,则没有人可以成为它的父节点,或者-自己的父母!...重新思考您表达需求的方式并改写您的帖子!
标签: delphi loops treeview iteration
我想将所选节点及其所有后代从一个 TTreeView 复制到另一个。
实现这一目标的最佳、最有效的方法是什么?
【问题讨论】:
标签: delphi loops treeview iteration
递归地执行此操作最简单,如下所示:
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);
【讨论】: