如何实现回车录入的方法?(50分)

  • 主题发起人 主题发起人 oxm
  • 开始时间 开始时间
O

oxm

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
本人在编制程序时录入界面大都采作鼠标选择方法,但用户在使用过程中提出,能否在录入时通过回车键来将光标移到下一条记录上,我如何实现这种方法,
能用回车,又能用鼠标录入?
 
可以查询以下本论坛,有过此讨论
 
截获键盘事件。
 
在KeyPress中把回车自己换成TAB
 
在KeyPress的事件中加如

if key=#13 then
下一记录.SetFocus;

此类问题最好自己先建立一模版

模版中用代码设定按TAB顺序确认下一输入焦点

后续应用界面可从此模版继承且只需设置TAB顺序即可!
 
在Keydown事件中
if key=vk_return then
begin
// 移动焦点到控件
end;
 
需要用回车键代替TAB键下移一个控件时,把form1.KeyPress设为True,加入下列代码拦截击键:
Procedure TForm1.FormKeyPress(Sender:Tobject;Var Key:Char);
Begin
 if key=#13 then { 判断是按执行键}
 if not (ActiveControl is TDbgrid) Then
 Begin { 不是在TDbgrid控件内}
  key:=#0;
  perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
 end else
 if (ActiveControl is TDbgrid) Then{是在 TDbgrid 控件内}
 begin
  With TDbgrid(ActiveControl) Do
  if Selectedindex<(FieldCount-1) then
  Selectedindex:=Selectedindex+1{ 移动到下一字段}
  else Selectedindex:=0;
 end;
End;
 
if key=13 then windows.postmessage(......
 
把所有要响应回车控件OnKeyPress事件中写入以下代码(只要在其中一个控件的
OnkeyPress事件中写下以下代码,其它的指向这一控件的Onkeypress事件就行了)
if key=#13 then
SelectNext(ActiveCotrol,True,True);
 
wind2000,处理那么多控件不累吗?
只要将 form 的keypreview属性置true。然后在form 的OnKeyDown事件处理程序中加入你的
代码就可以了。
 
关键是有时候有的代码我不想让它回应车事件!
 

wind2000的回答正确简单,本人也是通过此方法来实现的
 
控件的KEYPRESS事件中
IF key=#13 THEN
BEGIN
key:=#0;//吃掉回车键。
perform(CM_DIALOGKEY,VK_TAB,0);//变为tab键
END;
 
先检索一下多好,遇到过不下N次了。
 
if key=#13 then

用setfocus函数
 
在沒計時可以設置焦點的移動順序的﹐不過不太好用﹐用setfocus吧
 
可以在当前录入框的KeyPress事件中写代码:
if key=#13 then
下一个录入框.SetFocus.
(为保险:SetFoucs 前,先判断一下是否 Enabled )
 
用setfocus就ok了!
 
千万要记得把form-->keypreview改为true 不然没有的
在输入框的onkeypress事件中如下写:
begin ////转移焦点
if key=#13 then
begin
key:=#0;
selectnext(activecontrol,true,true);
end;
end;
 
多人接受答案了。
 
后退
顶部