如何复制TreeView 简短的说,就是想把一个TreeView的结点原封不动的复制给另外一个TreeView.我不想去递归遍历源树,然后再给目标树里的结点赋值.有没有什么比较快捷的方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 TreeView1.Items.Assign(TreeView2.Items); treeview的节点就是一个TTreeNode类型的实例,这样一说是不是很好明白了?var TmpNode: TTreeNode;begin //找到你要复制的节点TN_1 TmpNode := TTreeNode.Assign(TN_1); //用addchild将TmpNode加到目标树end; 看一下我编的过程://复制树procedure CopyTree(treeview:TTreeView;sourcenode,targetnode:TTreeNode);var newnode:TTreeNode; i:Integer;begin newnode:=treeview.Items.AddChildFirst(targetnode,''); //建立目标项 newnode.assign(sourcenode); //复制源项属性 for i:=sourcenode.count-1 downto 0 do //递归调用,按倒序移动其所有子项 CopyTree(treeview,sourcenode.item[i],newnode); //将复制后的节点显示出来 newnode.Collapse(True);end; to jinjazz(人雅的标记--落寞刺客) 用assign和:=的区别是什么啊? 对于引用类型,:=是将它们的指针指向同一个地址(仅此而已),assign是复制一份,就是说有一份真正的拷贝,即使原来的被free,也对新复制的没影响 用assign和:=的区别是什么啊?-----------------------------vara,b:Tsomeclassbegin a:=Tsomeclass.create; b:=Tsomeclass.create; .... b:=a;end;-----------------------------这样的代码导致已经分配给b的内存再也找不回来,也就是泄露了 哦,明白了。多谢YAMABACK(披荆斩棘,努力前进!) 和 jinjazz(人雅的标记--落寞刺客) ! 怎么设置报表的页面大小? 請教大家,幫我解決一下 小弟现在手上做一‘行业’仓库管理系统,急求帮助! 智力问题 怎样才能做到:把StringGrid中的选中单元(cell)复制到剪贴板? 在DELPHI中如何提取机器名、IP地址和网卡号(mac) 请问如何在一幅图片上做出玻璃破碎,下落的效果 我是初学者,请问各位高手,如何安装空间啊? 有谁知道Wwindows优化大师的标题栏上有了什么探件啊,我好想知道!!!!!!!!!! 运行出错!谢谢! 如果插入一条带有自动序列的记录 能否在dll里添加activeX控件
TmpNode: TTreeNode;
begin
//找到你要复制的节点TN_1
TmpNode := TTreeNode.Assign(TN_1);
//用addchild将TmpNode加到目标树
end;
//复制树
procedure CopyTree(treeview:TTreeView;sourcenode,targetnode:TTreeNode);
var
newnode:TTreeNode;
i:Integer;
begin
newnode:=treeview.Items.AddChildFirst(targetnode,''); //建立目标项
newnode.assign(sourcenode); //复制源项属性
for i:=sourcenode.count-1 downto 0 do //递归调用,按倒序移动其所有子项
CopyTree(treeview,sourcenode.item[i],newnode);
//将复制后的节点显示出来
newnode.Collapse(True);
end;
-----------------------------
var
a,b:Tsomeclass
begin
a:=Tsomeclass.create;
b:=Tsomeclass.create;
....
b:=a;
end;
-----------------------------
这样的代码导致已经分配给b的内存再也找不回来,也就是泄露了