如何实现回车后,自动到下一个输入框?(50分)

  • 主题发起人 主题发起人 fee
  • 开始时间 开始时间
已经有过无数回答,就是把form.keypriview:=true ,在form.keydown中判断
是否有vk_enter键按下,if true then
send vk_tab key to setfocus next
control.你要是多看看以答问题,不就省得花钱了吗。
 
我觉得hubdog的解法太麻烦,每个form都要判断一下!
下面的解法可以在整个程序中有效!
也就是说,只要在主窗口中定义一下,整个程序中都有效:
1、在主窗口中定义如下函数:
public
{ Public declarations }
procedure AppMessage(var Msg: TMsg;
var Handled: Boolean);
2、编写过程体如下:
procedure TFormMain.AppMessage(var Msg: TMsg;
var Handled: Boolean);
begin
if (Msg.message)=(WM_KEYDOWN)
then
if (Screen.ActiveForm.ActiveControl is TEdit)
and (Msg.wParam=VK_RETURN )
then
Msg.wParam:=VK_TAB;
end;

注:若不止是在TEdit中要实现此功能,还要在别的构件(如TComboBox等)中有效,
则只需在第二个IF条件中加入即可!
3、在主窗口的CREATE时间中加入如下语句:
procedure TFormMain.FormCreate(Sender: TObject);
begin
Application.onMessage:=AppMessage;
end;

如此就成。
若还有疑问,请通知我!

 
最好还是不要把什么用途的enter都换成tab。
必竟有些地方还是需要正常的enter按键的。
ztn;刚练完TT吗;-)
 

procedure TForm1.FormKeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
{ 判断是按回车键}
begin
key:=#0;
perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
end;
end;
用这个方法很好解决
 
这个问题太简单了,解决办法如下:
例如:Edit1,Edit2为两个文本输入框.
procedure TForm1.Edit1KeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
Edit2.SetFocus;
end;
这样就可以了。
 
我灌灌灌
if key=13 then
begin
key:=0;
perform(cm_dialogkey,vk_tab,0);
end;
 
var
i:integer;
begin
if key=13 then
taborder:=taborder+1;
if (component(i) is tedit) then

tedit(component(i)).setfouse;
end;
 
vari:integer;
begin
if key=13 then
for i:=0 to alldo

begin
taborder:=taborder+1;
if (component(i) is tedit) then

tedit(component(i)).setfouse;
end;
end;
all 为所有的控件个数
 
时间太久,强制结束。 wjiachun
 
后退
顶部