如何在DBEDIT控件中按回车键改变焦点? (50分)

  • 主题发起人 主题发起人 lmy
  • 开始时间 开始时间
L

lmy

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在DBEDIT控件中按回车键改变焦点?
DBEDIT已经和一个数据库连接,想通过DBEDIT控件改变数据库相关字段内容,可是
一按下回车键就POST了,怎么能通过回车键改变输入焦点?
我的窗体中既有DBGRID控件,也有DBEDIT控件,且DBGRID设为只读,现在数据库处于INSERT状态
,在DBEDIT控件中只要一回车,就POST了,再一回车,就提示数据库没有处于EDIT或INSERT状态,根本不执行
ONKEYDOWN或KEYPRESS事件,请高手执教!!
 
搜索一下本论坛,这个问题有很多。
 
if key=#13 then
then
ext.setfcouse;
我就是这么用的,不会有错,从没Post
 
看一看是不是提交按钮设置成default了
另可这样实现
form1.keyprievew:=false;
form1onkeydown
begin
if key=vk_return then
sendmessage(handle,wm_keydown,vk_tab,0);

end;
 
在dbgrid的keypress事件中
if key=#13 then
begin
with tdbgrid(activecontrol) do
if selectedindex<(fieldcount-1) then
selectedindex:=selectedindex+1
else
selectedindex:=0;
end;
 
[red]我的窗体中既有DBGRID控件,也有DBEDIT控件,现在数据库处于INSERT状态,在DBGRID控件
中只要一回车,就POST了,再一回车,就提示数据库没有处于EDIT或INSERT状态,根本不执行
ONKEYDOWN或KEYPRESS事件,请高手执教!![/red]
 
在DBGrid.OnKeyPress事件中加上
if key=#13 then
begin
Key:=char(0);//先屏蔽
xxx.setfocus;
end;
 
现在易的题都给人答了,叫我这种人怎样找饭吃啊!
 
在你的form事件的onkeydown输入:
if key = VK_RETURN then
begin
if ((Sender as TCustomForm).activecontrol is TMEMO) then

else
begin
postmessage((Sender as TWinControl).handle, WM_KEYDOWN, 9, 0);
postmessage((Sender as TWinControl).handle, WM_KEYUP, 9, 0);
end;
if key= Vk_Escape then
Self.Close;
end;
并且设置form.keypreview:=True
 
SelectNext(CurControl: TWinControl;
GoForward, CheckTabStop: Boolean);
 
抄自<Delphi之未经证实的葵花宝典version 2.5>,未加修改
(http://hubdog.myrice.com)
需要用回车键代替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);{移动到下一个控件}
 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;

你自己去试一下。
 
用dbedit输入,然后回车就用
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;

 
多人接受答案了。
 
后退
顶部