我的程序用十几个DBEdit做成一列,
用户希望按上下键切换他们的焦点
往下移动可以Perferm消息WM_NEXTDLGCTL
但是往前怎么办??
难道要Perferm消息WM_NEXTDLGCTL,很多次,直到循环回来??
大侠指条明路!!

解决方案 »

  1.   

    在控件的OnKeyPress事件中添加如下代码:
     if Key = #40 then  //#40为下键的ascii码
        begin
            Key := #0;
            SendMessage(Handle, WM_NEXTDLGCTL, 0, 0);
        end;
      

  2.   

    对不起,问题看错了,向上翻好像windows没有类似的消息提供,可以自己写代码实现,不过要考虑到层次关系,比较繁琐,采用多次WM_NEXTDLGCTL应该不现实
      

  3.   

    在控件的OnKeydown事件中添加如下代码:
    begin
       case Key of
          VK_DOWN:
          begin
             Key := 0;
             if TWinControl(ActiveControl).TabOrder < MAXTABORDER then
                SelectNext(ActiveControl, True, True);
          end;
          VK_UP:
          begin
             Key := 0;
             if TWinControl(ActiveControl).TabOrder <> 0 then
                SelectNext(ActiveControl, False, True);
          end;
       end;  
    end;
      

  4.   

    简单
    form1.keypreview:=true;
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
         case key of
           vk_up:      perform(WM_nextDLGCTL,1,0);       vk_down:    perform(WM_nextDLGCTL,0,0);
         end;
    end;
      

  5.   

    查查WM_nextDLGCTL帮助写得很清楚:)
      

  6.   

    在form.show事件里,加上如下代码youform.keypreview:=true;在form.formkeydown事件里,加上如下代码     case key of
           vk_up:      perform(WM_nextDLGCTL,1,0);//上键       vk_down:    perform(WM_nextDLGCTL,0,0);//下键
         end;