按钮的焦点转移(100分)

  • 主题发起人 主题发起人 wangzheking
  • 开始时间 开始时间
W

wangzheking

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
我是一名的delphi的初学者,正在用delphi5做毕业课题,有一个问题,我在一个form
里建立了如下控件:edit1,edit2,edit3,button,四个控件完成乘法运算的小程序,现在程
序已经完成,就是我想加入焦点转移,使得操作者不用鼠标,直接键盘可以完成这个操作,
步骤如下:将edit1的焦点转移到edit2上,然后在转移到button上,第一布我已经完成,可
是不知道如何进行第二布的转移,各位大虾,帮帮我这只菜鸟.谢谢.
 
以前有很多
搜索一下
 
通常可由两种方法转移:
第一种是设置控件中属性 Taborder,将控件的taborder按次序设置好后在程序运行时就
可以用TAB键来转换焦点。
第二种是设置利用控件中的setfocus来将焦点转移,如检测到Edit控件按下回车键后即将
焦点转移。
button1.setfocus;
 
1,保证每个控件的TabStop为TRUE
2,按照你要的顺序将控件的TabOrder依次编号
3,用Tab键就可以实现控件的焦点转移了。
4,如果你想透明用其它键盘键实现焦点转移,那么就在每个控件的OnKeyDown处写上下一个
控件的setfocus.
5,还有一个方法,就是定义一个全局变量记录当前焦点所在的控件的TabOrder,然后另外
写一个函数

procedure TForm1.EnumControls(Sender: TObject; var Key: Word;
Shift: TShiftState)
var
I : integer;
Control : TWinControl;
begin
for I := 0 to Form1.ControlCount - 1 do begin
Control := TWinControl(Form1.Controls);
if Control.TabOrder = 全局变量 + 1 then begin
Control.SetFocus;
Inc(全局变量);
Exit;
end;
end;
end;
然后每个控件的OnKeyDown都引用这个方法,这样代码就省了好多。
 
以上答案正确!
 
to:吕雪松大虾

你的方法很累,实际上只要设置控件的TabStop=true,再设置确定的TabOrder就行了。然后将Form的KeyPreview设为True。在OnKeyDown中用下面的语句
if key=13(或其他键值,但不能是Tab)
PostMessage(form.handle,wm_nextDlgCtl,0,0)就可以了
 
哎。。。。。。。
来晚了,上面的方法都行。
我也来灌灌水吧,我使用easylee的方法
在每个按钮的onclick事件里
button1.setfocus
就行了,很简单。
 
TWinControl本身有一个方法专门用来查找下一个TabOrderList中的Child Control:
function TWinControl.FindNextControl(CurControl: TWinControl; GoForward, CheckTabStop, CheckParent: Boolean): TWinControl;

TWinControl的SelectNext方法直接调用了上面的函数将Focus移动到下一个Child:
procedure TWinControl.SelectNext(CurControl: TWinControl; GoForward, CheckTabStop: Boolean);

例如当前的FOCUS在EDIT1上, 下一个TABORDER是EDIT2, 则:
Form1.SelectNext(Edit1, True, True)将Focus转移到Edit2上
 
多人接受答案了。
 
if key=$13 then next.......
 
后退
顶部