现在如果添加一个Node以后自动的放在最下面,要是想可以拖到上面的位置,
其他的Node顺延,如何实现呢?

解决方案 »

  1.   

    Step 1: Delete
    Step 2: Add
      

  2.   

    如果node很多的话。不是很好呀。有没有简单的方法?
    node是从数据库读出来得,在数据表单上下点功夫?
      

  3.   

    要在TREEVIEW的DATA里写一个用于排序的数值,拖放时按数值排列
      

  4.   

    只能,Delete和Add,你就不能保存一个结构缓存啊!非要从数据库重新读?
      

  5.   

    不用Delete和Add,用MoveTo即可。
    设置属性TreeView1.DragMode := dmAutomatic;
    在TreeView1的OnDragOver和OnDragDrop事件中:
    procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      Accept := True;
    end;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    var
      srcNode, destNode: TTreeNode;
    begin
      if (Source = TreeView1) then
      with TreeView1 do begin
        srcNode  := Selected;
        destNode := GetNodeAt(X, Y);
        if srcNode.Parent = destNode.Parent then  // 若是同一级则移动
          srcNode.MoveTo(destNode, naInsert);
      end;
    end;
      

  6.   

    行了,结帖了,两种方法一种是用MoveTo简单易行,但是将循序保存到数据库的话还是有点麻烦。第二种方法,使用data记录下次序。这样数据库可以轻松搞顶,所以两者联合使用就ok了。