简短的说,就是想把一个TreeView的结点原封不动的复制给另外一个TreeView.我不想去递归遍历源树,然后再给目标树里的结点赋值.有没有什么比较快捷的方法?

解决方案 »

  1.   

    TreeView1.Items.Assign(TreeView2.Items);
      

  2.   

    treeview的节点就是一个TTreeNode类型的实例,这样一说是不是很好明白了?var
      TmpNode: TTreeNode;
    begin
      //找到你要复制的节点TN_1
      TmpNode := TTreeNode.Assign(TN_1);
      //用addchild将TmpNode加到目标树
    end;
      

  3.   

    看一下我编的过程:
    //复制树
    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;
      

  4.   

    to jinjazz(人雅的标记--落寞刺客)   用assign和:=的区别是什么啊?
      

  5.   

    对于引用类型,:=是将它们的指针指向同一个地址(仅此而已),assign是复制一份,就是说有一份真正的拷贝,即使原来的被free,也对新复制的没影响
      

  6.   

    用assign和:=的区别是什么啊?
    -----------------------------
    var
    a,b:Tsomeclass
    begin
      a:=Tsomeclass.create;
      b:=Tsomeclass.create;
      ....
      b:=a;
    end;
    -----------------------------
    这样的代码导致已经分配给b的内存再也找不回来,也就是泄露了
      

  7.   

    哦,明白了。多谢YAMABACK(披荆斩棘,努力前进!) 和 jinjazz(人雅的标记--落寞刺客) !