自动移动输入焦点!(10分)

  • 主题发起人 主题发起人 sanjin
  • 开始时间 开始时间
S

sanjin

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样实现一个edit或其他控件输入完毕后(按Enter键)
自动把焦点移到下一个控件继续输入?
 
将form的keypreview值设为true,
在formkeypress事件中
if(Key=VK_REUTRN) then
begin
Key:=0;
Perform(WM_NEXTDLGCTL,0,0);
end
兄弟我是在c++ builder中用的,不知delphi中有无perform函数。
 
Edit1KeyDown事件中
if (Key=13) then
begin
Edit2.SetFocus;
end;
 
补充一下楼上的源码
加上一句key:=0;
可以使音箱不发出提示音
 
在TForm1.Edit1KeyUp事件里加入一下代码:
if (Key=13) then Edit2.SetFocus; {Edit2为下一个控件}
 
FormKeyDown中:
if key = 13 then
postmessage(curform.handle,wm_keydown,vk_tab,0);
 
楼上的朋友,能不能解释一下这个api呀!
我没用过! 谢谢!
 
需要用回车键代替TAB键下移一个控件时,把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); {移动到下一个控件}
//或
PostMessage(Activecontrol.Handle, WM_KEYDOWN, VK_TAB, 0); //以TAB代替回车
//或
SelectNext(ActiveControl as TWinControl, True, True);
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;
 
上面的方法都是在某一个控件的key事件中执行的,如果我有10个或者更多的edit控件时
就会出现很多的重复代码,下面是我做的一种方法,效果比较好

//让下一个控件得到焦点
procedure SendTab(Sender: TObject);
Obj_Sender:TObject; //全局变量
//应用程序重载默认的信息
Procedure CMDialogKey(var Message: TCMDialogKey);message CM_DIALOGKEY;
Procedure TzypNeoForm2.CMDialogKey(var Message: TCMDialogKey);
begin
if Message.CharCode = 13 then //按下了回车键
begin
Obj_Sender := ActiveControl;
SendTab(Obj_Sender); //选择下一个活动控件
Message.Result :=1;
exit;
end;
inherited;
end;

procedure TzypNeoForm2.SendTab(Sender: TObject);
begin

if Sender is TButton then //如果是按钮控件则执行单击过程
begin
(Sender as TButton).Click();
end
else
// if Sender is TEdit then//可是其他控件
begin
if HiWord(GetKeyState(VK_SHIFT)) <> 0 then
SelectNext(Sender as TWinControl, False, True) //按下shift键则反向选择
else
SelectNext(Sender as TWinControl, True, True);
end ;

end;


不知是否可以有分加?
 
楼上的兄弟,你看懂了吗?
 
有些地方看不懂! 正在努力!
 
通过检测keypress事件中的KEY值是否为'ENTER'或'TABLE'然后在用SETFOUCES确定下
一个构件的输入焦点即可!
 
多人接受答案了。
 
后退
顶部