如何有效控制TAB键在DBGRID中的移动(100分)

  • 主题发起人 主题发起人 吕义德
  • 开始时间 开始时间

吕义德

Unregistered / Unconfirmed
GUEST, unregistred user!
DBGrid与ADOQuery(通过datasource)连,现想ADOQuery.insert后在DBGrid
中进行大量的数据录入,原本想在输入时按TAB键可以在DBGrid中列间移动即
输入一个字段,TAB,下一列,...,一列输完,tab,自动到下一行...,但是在
操作中,总是不稳定,有时,tab,一列一列下去,但有时,刚输了一列,按tab键就跑到下一行去了,上一行还有好几个字段没输入就提交了,很恼人。原本想用StringGrid,但图省事就DBGRID了,可这小子不听话,(同一个DBGrid与多个表动态切换,但我想跟这没关系吧?),而且有个规律:输入第一行时,输入时不用TAB,而用鼠标一列一列点,到下一行TAB就开始正常了?!如果一开始不一列一列的,下面怎么搞都不行。讲了这么多,问题很简
单,但一两句又讲不清楚,该如何搞定TAB呢?
 
luyide@joyo.com
 
你可以用回车键代替TAB键:
需要用回车键代替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;
 
谢谢scloudy,程序可以解决同一行中的一列一列移动的问题,但应将keypreview=true而不是keyPress,同时要是能在最后一列时按回车(现在只有按TAb
了)自动跑到下一行就更好了:))
 
再加一句送虚拟键就行了
uses windows;

if Selectedindex<(FieldCount-1) then  Selectedindex:=Selectedindex+1{ 移动到下一字段}
  else
begin
keybd_event(VK_TAB,KEYEVENTF_KEYUP,0, 0);
end;
 
多人接受答案了。
 
后退
顶部