例如一棵樹:Root
  |--aaa
  |--bbb
  |--ccc          UP
  |--ddd          Down
  |--eee
當我按UP按鈕時,選中的節點向上移,當我按Down時選中的節點向下移如選中節點ddd,按UP時,ddd向上移Root
  |--aaa
  |--ddd
  |--bbb          UP
  |--ccc          Down
  |--eee

解决方案 »

  1.   

    procedure TForm1.TreeView1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
      Select_Text: string;
      Pre_Text: string;
      Beh_Text: string;
      Current_index: integer;
    begin
      Select_Text := TreeView1.Selected.Text;
      Current_index := TreeView1.Selected.Index;
      if Ord(key) = 38 then
      begin
        if Current_index = 0 then Exit;
        Pre_Text := TreeView1.Items.Item[Current_index - 1].Text;
        TreeView1.Selected.Text := Pre_Text;
        TreeView1.Items.Item[Current_index - 1].Text := Select_Text;
        TreeView1.Items.Item[Current_index].Selected := True;
      end;
      if Ord(key) = 40 then
      begin
        if Current_index = 4 then Exit;
        Beh_Text := TreeView1.Items.Item[Current_index + 1].Text;
        TreeView1.Selected.Text := Beh_Text;
        TreeView1.Items.Item[Current_index + 1].Text := Select_Text;
        TreeView1.Items.Item[Current_index].Selected := True;
      end;
    end;以上代码调试通过!
      

  2.   

    to:luke5678(奇异) 
    不行啊,
    我的意思是每按一次UP或down按鈕時,所選中的節點向下或向下移動
      

  3.   

    给个思路吧:先TreeView1.Destroy;
    再重新生成一颗数一般来讲,如果树的一个结点里不带有其它信息的话实现楼主所说的我认为改改Text的就可以了
      

  4.   

    用moveto方法,参数自己研究一下
      

  5.   

    方向键不能直接被接受,必须重写构件:从treeview继承:并添加两个public 方法 moveup 和movedown 用于操作----------代码-------拷贝后保存并安装:component-install component-browse...unit TestTree;interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls;
    type
      TMoveTree=class(TTreeview)
      protected
        procedure CMWantSpecialKey(var Message: TCMWantSpecialKey); message CM_WANTSPECIALKEY;
      public
        procedure MoveDownNode(Node:TTreeNode);
        procedure MoveUpNode(Node:TTreeNode);
    end;
    procedure Register;
    implementation
    procedure TMoveTree.MoveDownNode(Node:TTreeNode);
    var T:Ttreenode;
    begin
      If Node=nil then exit;
      T:=Node.getNextSibling;
      if T=nil then exit;
      if T.getNextSibling=nil then Node.MoveTo(T,naAdd)
      else
         Node.MoveTo(T.getNextSibling,naInsert);
    end;
    procedure TMoveTree.MoveUpNode(Node:TTreeNode);
    var T:Ttreenode;
    begin
      If Node=nil then exit;
      T:=Node.getPrevSibling;
      if T=nil then exit;
      Node.MoveTo(T,naInsert);
    end;
    procedure TMoveTree.CMWantSpecialKey(var Message: TCMWantSpecialKey);
    begin
      inherited;
      if (Message.CharCode = VK_Down)  or (Message.CharCode = VK_Up)
      then message.Result:=1;
    end;procedure Register;
    begin
       RegisterComponents('System', [TMoveTree]);
    end;
    end.
    ----------------------------------------------------------------使用范例:由于拦截了  CM_WANTSPECIALKEY 就可以在keydown中处理
    ---------------------------------------------------------------
    procedure TForm1.MoveTree1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       if key = VK_Down then
       begin
         MoveTree1.MoveDownNode(MoveTree1.Selected);
         MoveTree1.Selected.getPrevSibling.Selected:=true;
       end;
       if (key = VK_Up) then
       begin
         MoveTree1.MoveUpNode(MoveTree1.Selected);
         MoveTree1.Selected.getNextSibling.Selected:=true;
       end;
    end;------------------------经过测试
      

  6.   

    你們都跑題了,我的UP,Down都是Button按鈕,不是方向鍵啊
      

  7.   

    ----有答案都不肯自己看:
    ------------------------------------------------------------
    procedure MoveDownNode(Node:TTreeNode);
    var T:Ttreenode;
    begin
      If Node=nil then exit;
      T:=Node.getNextSibling;
      if T=nil then exit;
      if T.getNextSibling=nil then Node.MoveTo(T,naAdd)
      else
         Node.MoveTo(T.getNextSibling,naInsert);
    end;
    procedure MoveUpNode(Node:TTreeNode);
    var T:Ttreenode;
    begin
      If Node=nil then exit;
      T:=Node.getPrevSibling;
      if T=nil then exit;
      Node.MoveTo(T,naInsert);
    end;
      

  8.   

    用treeNode.moveto不就可以了,给的方法,要自己研究...
      

  9.   

    在按键事件中判断相应按键,然后用节点的MoveTo方法进行移动。