首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 实现TreeView多节点的同时移动 [已结贴,结贴人:maiomaio]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-24 15:23:32 楼主
    我现在可以通过dragDrop和DragDown两个函数实现拖动子节点到另一组,现在我想实现同时移动多个节点到另外一组,怎么实现?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lihuasoft
    • 等级:
    发表于:2008-03-24 16:04:131楼 得分:20
    把你的代码改一下应该就可以了。

    1、设置 TreeView.MultiSelect := True;
      然后就可以CTRL+单击选中多个节点了

    2、在DragDrop中套上一个循环:

      for I := TTreeView(Source).SelectionCount-1 downto 0 do begin

    循环对 TTreeView(Source).Selections[I]进行操作(就是选中的多个节点)

    自己试一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-24 17:11:102楼 得分:0
    楼上正解。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-24 17:15:403楼 得分:0
    同意楼上,
    先让节点可以多选,
    然后在触发Drag事件时,
    循环找选中的节点,
    在新的树里加上就可以了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-24 17:18:384楼 得分:0
    procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    var
      selectedNode: TTreeNode;
      toNode: TTreeNode;
      i: integer;
    begin
      if Source=TreeView1 then
      begin
        if self.TreeView1.SelectionCount>0 then
        begin
          toNode:=self.TreeView1.GetNodeAt(X,Y);
          for i:=TreeView1.SelectionCount-1 downto 0 do
          begin
            selectedNode:=self.TreeView1.Selections[i];
            selectedNode.MoveTo(toNode,naAddChild);
          end
        end
      end
    end;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-24 17:22:535楼 得分:0
    我这样写,会出错,而且也不能同时移多个
    另外DragOver函数如下
    procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    var
      selectedNode: TTreeNode;
      toNode: TTreeNode;
      i: integer;
    begin
      if Source=TreeView1 then
      begin
        if self.TreeView1.SelectionCount>0 then
        begin
          toNode:=self.TreeView1.GetNodeAt(X,Y);
          for i:=0 to TreeView1.SelectionCount-1 do
          begin
            selectedNode:=self.TreeView1.Selections[i];
            if (selectedNode.Level=2) and (toNode.Level=1) and (toNode <>selectedNode.Parent) then
            begin
              Accept:=true;
            end
            else
            begin
              Accept:=false;
            end
          end
        end
      end
      else
      begin
      Accept:=false;
      end
    end;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lihuasoft
    • 等级:
    发表于:2008-03-24 18:49:436楼 得分:0
    Delphi(Pascal) code
    //按楼主的写法改的 procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := Source is TTreeView; end; procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var I: integer; sNode, tNode : TTreeNode; begin tNode := TTreeView(Source).GetNodeAt(X, Y); for I := 0 to TTreeView(Source).SelectionCount-1 do begin Showmessage(inttostr(i)); sNode := TTreeView(Source).Selections[I]; sNode.MoveTo(tNode, naAddChild); end; end;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lihuasoft
    • 等级:
    发表于:2008-03-24 18:51:127楼 得分:0
    上面忘记了把Showmessage一句去掉。

    另外,设置TreeView1.MultiSelect := True,前面已经说了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-25 08:34:478楼 得分:0
    看不出您的跟我的有多个差虽,不过我还是试了下您说的,还是不能多点同时拖动
    另外MultiSelect我有设置
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-25 08:39:519楼 得分:0
    还是要谢谢你
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lihuasoft
    • 等级:
    发表于:2008-03-25 08:45:5510楼 得分:0
    但是我试了可以。确实可以。

    注意一下我与你的代码不同之处在:for循环 一个是for to  一个是 for downto
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lihuasoft
    • 等级:
    发表于:2008-03-25 08:51:4811楼 得分:0
    最初(在1楼)之所以给你写for downto 循环,是因为,我以为你的做法是:先拷贝节点,再删除原节点。

    后来你公布了你的代码,用的MoveTo,于是就不用 for downto 循环,改用了 for to 循环。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-25 09:20:0912楼 得分:0
    我的会跳出个错误提示,你的也会,List index out of bands(1),
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lihuasoft
    • 等级:
    发表于:2008-03-25 11:12:3013楼 得分:0
    你确信?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-25 11:18:1714楼 得分:0
    恩,要不要看下我的程序,给个邮箱或加下我QQ
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved