Delphi Treeview 移动到别一个 Treeview

各位高手:小弟如今要实现将TreeView1中的节点或子节点移动到TreeView2中。如求:移动后TreeView2的结构跟移动前的结构一致,删除TreeView1中已... 各位高手:小弟如今要实现将TreeView1中的节点或子节点移动到TreeView2中。
如求:移动后TreeView2的结构跟移动前的结构一致,删除TreeView1中已移动的内容。
例如:移动TreeView1中一个子节点到TreeView2中,那么需要在TreeView2中创建这个子节点的父节点,这个父节点下再创建被移动的这个子节点,并删除TreeView1中的这个子节点。当然也要实现节点整体移动删除功能。
procedure TForm1.Button1Click(Sender: TObject);
begin
copynode(nil,TreeView1.selected,TreeView1.selected.text);
end;
procedure Tform1.copynode(anode,bnode:TTreeNode;s:string);
var node1,node2:ttreenode;
begin
if anode=nil then
node1:=TreeView2.Items.Addfirst(anode,s)
else
node1:=TreeView2.Items.AddChild(anode,s);
if bnode.HasChildren then
begin
node2:=bnode.getFirstChild;
copynode(node1,node2,node2.text);
while bnode.GetNextchild(node2) <> nil do
begin
node2:=bnode.GetNextChild(node2);
if node2 <> nil then
copynode(node1,node2,node2.text);
end;
end;
end;

我写这个TW2得不到TW1相同的结构,请高手修改。搞定再追加20分
展开
 我来答
liu55721
2012-09-18 · TA获得超过922个赞
知道大有可为答主
回答量:1861
采纳率:100%
帮助的人:862万
展开全部
你既然已经能够创建节点,就可完全可以自己完成这代码,这实际上就是在TW2中创建一个与TW1中相同的节点,并在创建完毕后将TW1选中的节点删除.表面看来是将TW1中的节点拖放到了TW2中,实际是就是一个增加和删除节点的操作.
追问
我是用查询数据库的方式得到树结构的。对这个控件不熟。不知道如何操作它的节点和子节点。
追答
一般来说,通过数据表查询得到的树形结构图,做两个树形图之间的节点移动,意义不是很大,因为你如果想得到一个系列的数据的话,你可以通过另外一条SQL得到一个你想要的树形图.与数据库连接的树形图,最适当的用途是数据编辑导航.比如物业公司收费,业主来缴费,你可以通过树形图来快速检索业主信息,进入该业主的缴费办理界面,实施收费操作.除了导航外,还有一个功能就是数据浏览.如果要作其它使用,如编辑或更新数据,树形就不是那么好用了.因为用起来很麻烦,你像WIN系统的注册表,就是一个庞大的树形图,他也可以新增或修改或删除数据,但是如果不是专业人员,根本就搞不了.编程序,用软件来解决问题,最主要的一点是:把复杂的问题搞简单(,那种办法简单就用那一种,不要在一棵树上吊死,)而不是把简单的问题搞复杂,如果把简单的搞复杂,那你的软件就没有人用了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
YiFei_erp19
2012-09-22 · TA获得超过1169个赞
知道小有建树答主
回答量:1584
采纳率:40%
帮助的人:448万
展开全部
The following code uses GetNodeAt to add a dragged node as a child of the node under then mouse when it is dropped.
~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TForm1.TreeView1DragDrop
(Sender, Source: TObject; X, Y: Integer) ;
var
AnItem: TTreeNode;
AttachMode: TNodeAttachMode;
HT: THitTests;
begin
if TreeView1.Selected = nilthen Exit;
HT := TreeView1.GetHitTestInfoAt(X, Y) ;
AnItem := TreeView1.GetNodeAt(X, Y) ;
if (HT -
[htOnItem, htOnIcon, htNowhere, htOnIndent]
<> HT) then
begin
if (htOnItem in HT) or
(htOnIcon in HT) then
AttachMode := naAddChild
else if htNowhere in HT then
AttachMode := naAdd
else if htOnIndent in HT then
AttachMode := naInsert;
TreeView1.Selected.
MoveTo(AnItem, AttachMode) ;
end;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式