我在treeview按空格键一下,treeview在当前位置下移动一下,如何实现呀,

解决方案 »

  1.   

    是否指滚动条向下移动?
    如果是请参考此贴:
    http://topic.csdn.net/t/20050217/18/3788264.html
      

  2.   

    来自CSDN:(*//
    标题:移动树节点
    说明:上、下、左、右移动
    设计:Zswang
    日期:2002-06-08
    支持:[email protected]
    //*)
    ///////Begin Source
    function TreeNodeMove(mTreeNode: TTreeNode; mAnchorKind: TAnchorKind;
      mIsTry: Boolean = False): Boolean;
    var
      vTreeNode: TTreeNode;
    begin
      Result := Assigned(mTreeNode);
      if not Result then Exit;
      case mAnchorKind of
        akTop: begin
          vTreeNode := mTreeNode.GetPrev;
          while Assigned(vTreeNode) do begin
            if vTreeNode = mTreeNode.GetPrevSibling then begin
              if not mIsTry then mTreeNode.MoveTo(vTreeNode, naInsert);
              Exit;
            end else if (vTreeNode.Level = mTreeNode.Level) then begin
              if not mIsTry then mTreeNode.MoveTo(vTreeNode, naAdd);
              Exit;
            end else if (vTreeNode <> mTreeNode.Parent) and
              (vTreeNode.Level + 1 = mTreeNode.Level) then begin
              if not mIsTry then mTreeNode.MoveTo(vTreeNode, naAddChild);
              Exit;
            end;
            vTreeNode := vTreeNode.GetPrev;
          end;
        end;
        akBottom: begin
          vTreeNode := mTreeNode.GetNext;
          while Assigned(vTreeNode) do begin
            if vTreeNode = mTreeNode.GetNextSibling then begin
              if not mIsTry then vTreeNode.MoveTo(mTreeNode, naInsert);
              Exit;
            end else if (vTreeNode.Level = mTreeNode.Level) then begin
              if not mIsTry then mTreeNode.MoveTo(vTreeNode, naAddFirst);
              Exit;
            end else if vTreeNode.Level + 1 = mTreeNode.Level then begin
              if not mIsTry then mTreeNode.MoveTo(vTreeNode, naAddChildFirst);
              Exit;
            end;
            vTreeNode := vTreeNode.GetNext;
          end;
        end;
        akLeft: begin
          vTreeNode := mTreeNode.Parent;
          if Assigned(vTreeNode) then begin
            if not mIsTry then mTreeNode.MoveTo(vTreeNode, naInsert);
            Exit;
          end;
        end;
        akRight: begin
          vTreeNode := mTreeNode.GetNextSibling;
          if Assigned(vTreeNode) then begin
            if not mIsTry then mTreeNode.MoveTo(vTreeNode, naAddChildFirst);
            Exit;
          end;
        end;
      end;
      Result := False;
    end; { TreeNodeMove }
    ///////End Source
    ///////Begin Demo
    procedure TForm1.TreeView1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if not (ssCtrl in Shift) then Exit;
      case Key of
        VK_UP: TreeNodeMove(TTreeView(Sender).Selected, akTop);
        VK_DOWN: TreeNodeMove(TTreeView(Sender).Selected, akBottom);
        VK_LEFT: TreeNodeMove(TTreeView(Sender).Selected, akLeft);
        VK_RIGHT: TreeNodeMove(TTreeView(Sender).Selected, akRight);
      end;
    end;
    procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject;
      Node: TTreeNode);
    begin
      CheckBox1.Checked := TreeNodeMove(TTreeView(Sender).Selected, akTop, True);
      CheckBox2.Checked := TreeNodeMove(TTreeView(Sender).Selected, akBottom, True);
      CheckBox3.Checked := TreeNodeMove(TTreeView(Sender).Selected, akLeft, True);
      CheckBox4.Checked := TreeNodeMove(TTreeView(Sender).Selected, akRight, True);
    end;
    ///////End Demo
      

  3.   

    可能我说错了
    我在treeview按空格键一下,treeview在当前位置下移动一下,焦点往下移,结点不动
    如何实现呀,
      

  4.   

    可能我说错了  
    我在treeview按空格键一下,treeview在当前位置焦点移动一下,结点不动  
    如何实现呀,
      

  5.   

    在onKeyDown事件里写
      if key = VK_SPACE then
        key := VK_DOWN;