TreeView组件如何实现同一级Node的位置可以随意的拖动。

song317 2003-02-12 07:30:38
现在如果添加一个Node以后自动的放在最下面,要是想可以拖到上面的位置,
其他的Node顺延,如何实现呢?
...全文
64 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
song317 2003-02-13
  • 打赏
  • 举报
回复
行了,结帖了,两种方法一种是用MoveTo简单易行,但是将循序保存到数据库的话还是有点麻烦。第二种方法,使用data记录下次序。这样数据库可以轻松搞顶,所以两者联合使用就ok了。
sysu 2003-02-13
  • 打赏
  • 举报
回复
不用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;
BlueTrees 2003-02-12
  • 打赏
  • 举报
回复
只能,Delete和Add,你就不能保存一个结构缓存啊!非要从数据库重新读?
Billy_Chen28 2003-02-12
  • 打赏
  • 举报
回复
要在TREEVIEW的DATA里写一个用于排序的数值,拖放时按数值排列
song317 2003-02-12
  • 打赏
  • 举报
回复
如果node很多的话。不是很好呀。有没有简单的方法?
node是从数据库读出来得,在数据表单上下点功夫?
Eastunfail 2003-02-12
  • 打赏
  • 举报
回复
Step 1: Delete
Step 2: Add

5,392

社区成员

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

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