onkeydown()中好象可以
if key=vk_up then
..............
if key=vk_down then
..............

解决方案 »

  1.   

    在KeyDown事件里,如:
    procedure TfmLine.MeNameKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if (Key = VK_DOWN)  then begin
        Key := Word(#0);
        PostMessage(GetParentForm(self).Handle,WM_NEXTDLGCTL, 0, 0);
      end
      else if Key = VK_UP then begin
        Key := Word(#0);
        PostMessage(GetParentForm(Self).Handle, WM_NEXTDLGCTL, 1, 0);
      end
      else inherited;
    end;
      

  2.   

    同意youfly(无名)的方法,我以前也是这样用的不过是用sendmessage
      

  3.   

    procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char;
      Shift: TShiftState);
    begin
      if Key = Char(VK_UP) then 
      begin
        Key := #0;
        SendMessage(GetParentForm(Self).Handle, WM_NEXTDLGCTL, 1, 0);
      end
      if Key = Char(VK_DOWN) then 
      begin
        Key := #0;
        SendMessage(GetParentForm(self).Handle,WM_NEXTDLGCTL, 0, 0);
      end;
    end;
      

  4.   

    有时候来的晚不一定是件坏事呀:]
    keypress是不能响应这两个键的!要用keydown事件
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if key=vk_down then           //fomr1的keypreview必须设为true
      begin
        key:=0;
        sendmessage(handle,WM_NEXTDLGCTL,0,0);
      end;
      if key=vk_up then
      begin
        key:=0;
        sendmessage(handle,WM_NEXTDLGCTL,1,0);
      end;
    end;
    代码已测试通过,希望能把分给我!!
      

  5.   

    楼上的,已经有人说是在keydown事件中了,你没有看清楚帖子而已。
    而且,在keypress也没有什么不可以的,把他的ASC码取出不就可以了吗。
      

  6.   

    to youfly
      你的代码是对的,但是我觉得你的说法很有问题,请问这个方法是你首创的么?如果不是,那么你也是盗版,把你的代码改一改,也许更有效率
    procedure TfmLine.MeNameKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if (Key = VK_DOWN)  then begin
        Key := Word(#0);
        //PostMessage(GetParentForm(self).Handle,WM_NEXTDLGCTL, 0, 0);
        PostMessage(self.Handle,WM_NEXTDLGCTL, 0, 0);
      end
      else if Key = VK_UP then begin
        Key := Word(#0);
        //PostMessage(GetParentForm(Self).Handle, WM_NEXTDLGCTL, 1, 0);
        PostMessage(self.Handle,WM_NEXTDLGCTL, 1, 0);
      end;
      //我觉得没什么必要
      //else inherited;
    end;to kofxdm
      keypress中的确接收不到up和down两个键,不信你试试
      

  7.   

    procedure TFUser.EnterNext(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if (Key=VK_RETURN) then
         SelectNext((sender as TWinControl),true,true);
    end;procedure TFUser.SetKey;
    var
      I : integer;
    begin
      for  i := 1 to 11 do
      begin
        TDBEdit(FindComponent('DBEdit'+ inttostr(I))).OnKeyDown := EnterNext;
      end;  for  i := 1 to 2 do
      begin
        TDBComboBox(FindComponent('DBComboBox'+ inttostr(I))).OnKeyDown := EnterNext;
      end;
    end;这样就可以了
      

  8.   

    漏了说一句,我上面的代码是用enter切换焦点在不同控件之间转移的,吧enter更改成上下键就应该可以了