请教一个小问题!!!(26分)

  • 主题发起人 主题发起人 ranyang
  • 开始时间 开始时间
R

ranyang

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中一个界面中有很多EDit,然后要求回车就光标下移到下一个Edit,然后就得写很多形如下面的:
procedure TfrmSocket.Edt1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then Edt2.SetFocus;
end;

procedure TfrmSocket.Edt2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then Edt3.setfocus;
end;

procedure TfrmSocket.Edt3KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then Edt4.setfocus;
end;

procedure TfrmSocket.Edt4KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then Edt5.SetFocus;
end;

procedure TfrmSocket.Edt5KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then Edt6.setfocus;
end;
。。。。。。
我不想这样!!!!但需要实现!!
该如何精简代码。
 
将Form的KeyPreview为true
然后在Form的onKeyPress写如下代码:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
Perform(WM_NEXTDLGCTL,0,0);

end;
 
创建一个如下过程,然后将该过程句柄赋值给每个Edit实例的OnKeyDown事件既可!
procedure TForm1.Action(Sender: TObject; var Key: Word);
begin
if Sender.ClassNameIs('TEdit') then
if Key = 13 then
TEdit(Sender).SetFocus;
end;
 
将所有的Edit起同类型的名字,比如Edit1,Edit2......
对应的Tag分别为1,2......
将所有Edit的OnKeyDown设置为同一个过程
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
(FindComponent('Edit' + IntToStr((Sender as TEdit).Tag + 1)) as TEdit).SetFocus;
end;
 
感谢!Chuwenyong的好用!!!
 
后退
顶部