How do I take the data from one populated treeview and put it into another existing treeview. All the nodes and children need to be copied.
TTreeNode
implements the TPersistent.Assign()
method, so one option would be to write a recursive function that iterates the source TreeView adding-and-assigning nodes to the target TreeView. For example:
procedure CopyNodes(SrcTree, DstTree: TTreeView);
var
DstNodes: TTreeNodes;
SrcRootNode: TTreeNode;
procedure DoCopyNodes(SrcNode, Relative: TTreeNode; AddMode: TNodeAttachMode);
var
DstNode: TTreeNode;
begin
while SrcNode <> nil do
begin
DstNode := DstNodes.AddNode(nil, Relative, '', nil, AddMode);
try
DstNode.Assign(SrcNode);
DoCopyNodes(SrcNode.GetFirstChild, DstNode, naAddChild);
except
DstNode.Delete;
raise;
end;
SrcNode := SrcNode.GetNextSibling;
end;
end;
begin
SrcRootNode := SrcTree.Items.GetFirstNode;
if SrcRootNode <> nil then
begin
DstNodes := DstTree.Items;
DstNodes.BeginUpdate;
try
DoCopyNodes(SrcRootNode, nil, naAdd);
finally
DstNodes.EndUpdate;
end;
end;
end;
CopyNodes(TreeView1, TreeView2);