下面这段代码可在TDBGrid/tstringGrid中用回车键代替TAB的功能
procedure tform1.formkeypress(sender:tobject;var key:char);
begin     //判断接收者是否是回车
if key=#13 then    //判断接收者是否是TDBGRID
if not (ActiveControl is TDBGrid) then
begin
  key:=#0;
  Perform(WM_NEXTDLGCTL,0,0);   //跳转到下一个控件焦点
end
else if (ActiveControl is TDBGrid)  then
 begin
   with TDBGrid(ActiveControl) do
   if selectedindex<fieldcount-1  then
    SelectedIndex:=SelectedIndex+1    //跳转到下一栏
   else
    SelectedIndex:=0;
 end;

解决方案 »

  1.   

    if key=vk_return then
      postmessage(handle,wm_keydown,vk_tab,0);
      

  2.   

    if key=#13 then
     BEGIN
      key:=#0;
       CASE DBGrid1.SELECTEDINDEX OF
       0:
        begin
        DBGrid1.SELECTEDINDEX:=3;
        end;
       1..2:DBGrid1.SELECTEDINDEX:=3;
       3:   DBGrid1.SELECTEDINDEX:=4;
       4..5:DBGrid1.SELECTEDINDEX:=6;
       6:
         begin
         data1.query1.next;
         DBGrid1.SELECTEDINDEX:=0;
         end;
       end;
    end;  
      

  3.   

    我认为树的方法也可行,但得变动一下!
    if key=vk_return then
      postmessage(dbgrid1.handle,wm_keydown,vk_tab,0); 
      

  4.   

    首先设置Form1的keypreview属性为ture;
    然后
    procedure tform1.formkeypress(sender:tobject;var key:char);
    begin    //判断接收者是否是回车
    if key=#13 then    //判断接收者是否是TDBGRID
    if not (ActiveControl is TDBGrid) then
    begin
      key:=#0;
      Perform(WM_NEXTDLGCTL,0,0);  //跳转到下一个控件焦点
    end
    else if (ActiveControl is TDBGrid)  then
    begin
      with TDBGrid(ActiveControl) do
      if selectedindex<fieldcount-1  then
        SelectedIndex:=SelectedIndex+1    //跳转到下一栏
      else
        begin
         adotable1.next;//移动到下一行
         TDBGrid(ActiveControl).SelectedIndex:=0;
       end;
    end; 
      

  5.   

    本人正需要luozhenyu所述的功能,单以上方法并未实现以下功能:
    如果是最后一行,则追加一条记录(是追加!而不是插入!)请问有那位知道如何真正实现这个功能?
      

  6.   

    if key=#13 then    //判断接收者是否是TDBGRID
    if not (ActiveControl is TDBGrid) then
    begin
      key:=#0;
      Perform(WM_NEXTDLGCTL,0,0);  end
    else if (ActiveControl is TDBGrid)  then
    begin
      with TDBGrid(activecontrol) do
      if selectedindex<fieldcount-1  then
        SelectedIndex:=SelectedIndex+1 
      else
        begin
        table1.next;
        if table1.Eof then
        table1.append;
        SelectedIndex:=0;
        end;
    end;