TreeView组件如何实现同一级Node的位置可以随意的拖动。 现在如果添加一个Node以后自动的放在最下面,要是想可以拖到上面的位置,其他的Node顺延,如何实现呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Step 1: DeleteStep 2: Add 如果node很多的话。不是很好呀。有没有简单的方法?node是从数据库读出来得,在数据表单上下点功夫? 要在TREEVIEW的DATA里写一个用于排序的数值,拖放时按数值排列 只能,Delete和Add,你就不能保存一个结构缓存啊!非要从数据库重新读? 不用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; 行了,结帖了,两种方法一种是用MoveTo简单易行,但是将循序保存到数据库的话还是有点麻烦。第二种方法,使用data记录下次序。这样数据库可以轻松搞顶,所以两者联合使用就ok了。 这一段代码老是执行不成功 问几个DELPHI的菜鸟问题? (高手请进) 三层结构中那个tlb具体是干什么用的?都包含那些类容? 请问,哪里有日文版IE6.0的安装程序? 类型转换问题!? 如何实现类似MSN Messenger 的一段时间用户没有使用计算机显示"离线" 新手求助:ADO! 如何让窗体大小固定不变!!!!!! 各位大哥,请帮帮忙 怎过判断一个按钮被双击了 怎样在窗体中自动生成一个控件 我想从QQ的user.db文件中读取QQ好友列表,如何做呢??急
Step 2: Add
node是从数据库读出来得,在数据表单上下点功夫?
设置属性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;