怎样将一个treeview的节点(包括其下的子节点)复制到另一个treeview中?

d_fang 2000-12-25 08:58:00
怎样将一个treeview的节点(包括其下的子节点)复制到另一个treeview中?
...全文
350 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxtyhy 2000-12-26
  • 打赏
  • 举报
回复
只能用循环了
Kingron 2000-12-26
  • 打赏
  • 举报
回复
何必辛苦呢,算了,我走人。
imhere_l 2000-12-26
  • 打赏
  • 举报
回复
procedure AddSubTree(DestTree: TTreeView; SourceNode, DestNode: TTreeNode; AddState: Boolean);
var
TempNode, TempNode1: TTreeNode;
I : integer;
begin
TempNode := DestNode;

with DestTree do begin
if Not (AddState) then TempNode := Items.AddChild(DestNode, sourceNode.Text);
if SourceNode.HasChildren then begin
for I := 0 to SourceNode.Count-1 do begin
if I>0 then
TempNode := Items.AddChild(TempNode.Parent, SourceNode.Item[I].Text)
else
TempNode := Items.AddChild(TempNode, SourceNode.Item[I].Text);
AddSubTree(DestTree, SourceNode.Item[I], TempNode, True);
end;
end;
end;
end;

procedure MoveSubTreeView(SourceTreeView, DestTreeView: TTreeView; Keep: Boolean);
var
TempLevel, TempIndex : integer;
I, J : integer;
TempNode : array of TTreeNode;
TempNode1 : TTreeNode;
Yes_No : Boolean;
OldOnChanging, OldOnChanging1 : TTVChangingEvent;
OldOnChange, OldOnChange1 : TTVChangedEvent;
IsSelected : TTreeNode;
begin
OldOnChanging := DestTreeView.OnChanging;
DestTreeView.OnChanging := Nil;
OldOnChange := DestTreeView.OnChange;
DestTreeView.OnChange := Nil;
OldOnChanging1 := SourceTreeView.OnChanging;
SourceTreeView.OnChanging := Nil;
OldOnChange1 := SourceTreeView.OnChange;
SourceTreeView.OnChange := Nil;

IsSelected := SourceTreeView.Selected;
TempLevel := SourceTreeView.Selected.Level;
setlength(TempNode, TempLevel+1);
Yes_No := False;
TempNode1 := Nil;

TempIndex := FindNode(DestTreeView, SourceTreeView.Selected.Text);
if TempIndex>-1 then begin
DestTreeView.Items[TempIndex].Delete;
end;

with SourceTreeView do begin
TempNode[TempLevel] := Selected;
if TempLevel>0 then
for I := TempLevel-1 downto 0 do begin
TempNode[I] := TempNode[I+1].Parent;
end;
end;

with DestTreeView.Items do begin
if Count>0 then begin
for I := TempLevel downto 0 do
for J := Count-1 downto 0 do begin
if (TempNode[I].Text=DestTreeView.Items[J].Text) and (TempNode1=Nil) then begin
if I=Templevel then Yes_no := True;
TempNode1 := DestTreeView.Items[J];
end;
end;
end;

if TempNode1=Nil then
for I := 0 to TempLevel-1 do begin
TempNode1 := AddChild(TempNode1, TempNode[I].Text);
end
else
for I := TempNode1.Level+1 to TempLevel-1 do begin
TempNode1 := AddChild(TempNode1, TempNode[I].Text);
end;
end;


AddSubTree(DestTreeView, IsSelected, TempNode1, False);//Yes_No);
if (Not (Keep)) then begin
if (IsSelected.Parent<>Nil) and (IsSelected.Parent.Count<1) then
IsSelected.Parent.Delete
else
IsSelected.Delete;
end;

DestTreeView.SortType := stData;

DestTreeView.OnChanging := OldOnChanging;
DestTreeView.OnChange := OldOnChange;
SourceTreeView.OnChanging := OldOnChanging1;
SourceTreeView.OnChange := OldOnChange1;
end;
d_fang 2000-12-25
  • 打赏
  • 举报
回复
要指定一个节点!!
saoren 2000-12-25
  • 打赏
  • 举报
回复
treeview1.items:=treeview2.items;
猛禽 2000-12-25
  • 打赏
  • 举报
回复
用递归吧,别偷懒^_^
WorldCreater 2000-12-25
  • 打赏
  • 举报
回复
gjq2000 2000-12-25
  • 打赏
  • 举报
回复
1. 全部Copy
TreeView1.Items.Assign(TreeView2.Items);
2. 部分Copy
我正在想...
gjq2000 2000-12-25
  • 打赏
  • 举报
回复
TreeView1.Items.Assign(TreeView2.Items);
frankguo 2000-12-25
  • 打赏
  • 举报
回复
有好办法通知我,谢谢

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧