如题啦,有若干个edit然后想用上下键来代替tab键完成焦点的切换,能上能下的,大家有什么好主意?

解决方案 »

  1.   

    a是当前控件的taborder
    with Self do
            begin          for i := 0 to ControlCount - 1 do
              begin
                if TWinControl(Controls[i]).TabOrder = a+ 1 then
                begin
                  TWinControl(Controls[i]).SetFocus;
                end;
              end;
            end;
    上面是查找下一个控件并设置坐标  查找上一个控件同理你可以判断是否按下
    上或下
    然后通过上面的代码设置坐标
      

  2.   

    当然 还要屏蔽tab
     
    选中所有你需要的屏蔽的控件 然后在keypress中判断是否按下的shitab
    然后这只key:=#0就屏蔽掉了
      

  3.   

    汗  刚试验了一下 好像我的方法不能屏蔽tab  
      

  4.   

    你将所有不能用tab的选中  
    见他们的tabstop属性设置成false 
      

  5.   

    算了 给你代码 首先   将所有的控件的tabstop属性设置成false
    然后将它们的keydown时间都指向edt1KeyDownprocedure TForm1.edt1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
      var i:Integer;
    begin
    if Key=vk_up then
    begin
         with Self do
            begin
              for i := 0 to ControlCount - 1 do
              begin
                if TWinControl(Controls[i]).TabOrder = ActiveControl.TabOrder- 1 then
                begin
                  TWinControl(Controls[i]).SetFocus;
                end;
              end;
            end;
    end else if key= VK_DOWN then
             begin
                  with Self do
            begin
              for i := 0 to ControlCount - 1 do
              begin
                if TWinControl(Controls[i]).TabOrder = ActiveControl.TabOrder+ 1 then
                begin
                  TWinControl(Controls[i]).SetFocus;
                end;
              end;
            end;
             end;
    end;
      

  6.   

    keypress
    keyup
    keydown
    这里写比较好,但是也比较麻烦,每个都要确认
    可以写个数组定义好顺序,然后写个公共方法确定上一个和下一个,
    最后只要在key事件里调用这个方法即可
      

  7.   

    就是 将所有的控件的keydown时间全部指定向edt1KeyDown