在数据输入窗体中,如何用回车键代替Tab键使输入焦点在不同的Edit控件之间切换?
我知道的方法是在每个Edit控件的OnKeyPress时间中加入如下代码:
if (Key=#13) then
begin
key:=#0;
perform(WM_NEXTDLGCTL,0,0);
end;但是如果Edit控件很多,这样就很麻烦,不知有没有其他方法?请赐教
我知道的方法是在每个Edit控件的OnKeyPress时间中加入如下代码:
if (Key=#13) then
begin
key:=#0;
perform(WM_NEXTDLGCTL,0,0);
end;但是如果Edit控件很多,这样就很麻烦,不知有没有其他方法?请赐教
begin
if key=#13 then
Edit2.SetFocus;
end;
SetFocus就是輸入的焦點
这样不还是要对每个Edit写代码吗?
以edit1...edit9为例,见他们的onkeypess事件都设为Edit9KeyPress,代码如下:
procedure TForm1.Edit9KeyPress(Sender: TObject; var Key: Char);
var
temp:string;
i:Integer;
begin
if Key=#13 then
begin
temp:=copy((Sender as TEdit).Name,5,2);
i:=StrToInt(temp);
if i=9 then
Edit1.SetFocus
else begin
inc(i,1);
TEdit(self.FindComponent('edit'+IntToStr(i))).SetFocus;
end;
end;
end;
设置 Form 的 KeyPreview 为真,然后用你的代码来处理。
我以前忘了将Form的KeyPreview设为真,走了不少弯路再次谢谢大家的帮助!!
procedure Tfmtest.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
key := #0;
perform(wm_nextdlgctl, 0, 0);
end;end;
给一个最牛B的方法,Form1.Keypreview:=true
procedure Tfrm_.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
Keybd_Event(Vk_Tab, 0, 0, 0);
end;
end;以上的方法有些是行的,但有一个最大的弊端,就就shift+回车就无能为力了
procedure Tfrm_.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
Keybd_Event(Vk_Tab, 0, 0, 0);
end;
end;
procedure TFRBMCL.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
IF KEY=13 THEN
IF screen.ActiveControl is TEdit THEN
BEGIN
key:=0;
Perform(WM_NEXTDLGCTL, 0, 0);
END;
end;解决了!