1.比如我在DBGrid1的第一列(A列)单元格,输入"1001"后回车,跳到第二行的第一列(A列)单元格,继续输入"1002",回车....;
2.同样当鼠标点击DBGrid1的第二列(B列)单元格输入"小五"后回车,跳到第二行的第二列(B列)单元格,继续输入"小六",回车....;
  请问各位大侠在procedure TFrmPiandeng.DBGrid1KeyDown 事件里如何代码啊?
       TKS!!!

解决方案 »

  1.   

    【转】不知道对你说的那个有没的用,我只用在EDIT上试过。
    直接在DBGrid中录入数据时,录入完一个字段后需要用TAB键转入下一个字段,而我们通常的输入习惯是输入完毕按回车键,下面这段代码可实现用回车键代替TAB键,例子代码如下:首先把Form1的KeyPreview属性设为True,编写窗体的KeyPress事件代码,procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);beginif key=#13 then if not (ActiveControl is TDbgrid) Then//不是DBGrid组件Begin  key:=#0; perform(WM_NEXTDLGCTL,0,0);end elseif (ActiveControl is TDbgrid) Then//是Dbgrid组件beginWith TDbgrid(ActiveControl) Doif Selectedindex<(FieldCount-1) thenSelectedindex:=Selectedindex+1else Selectedindex:=0;end;
      

  2.   

    我下面有几行代码:
       就是在DBGrid1的第一列(A列)单元格,输入"1001"回车后,光标就跳到了DBGrid1的第二列(B列)单元格了,在第二列(B列)的回车正常,但是在第一列(A列)单元格和其它列如C、D、E列等等输入后回车,光标又总是跳到第二列(B列)上了。
       为什么这样啊??大家帮改改下面的代码。TKS!procedure TFrmPiandeng.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      inherited;
       if key=13 then
       begin
          DBGrid1.DataSource.DataSet.Append;
          DBGrid1.SelectedIndex :=0;
          DBGrid1.SetFocus;   
       end;
    end;
      

  3.   

    DBGRID可以用方向键(向下)增加一行, 可以做到你要的同列不同行的要求, 你只要用回车键模拟方向键(向下)就可以了
      

  4.   

    procedure TForm1.dbgrd1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key=13 then key:=9;
    end;
      

  5.   

    你想要的效果是什么啊?
    因为DBGrid1.SelectedIndex :=0;
    接向的就是A列。
      

  6.   

    1.是的,回车时增加一条空的记录,现在DBGrid1.SelectedIndex :=0;不是接向A列啊,而是回车时光标接向了B列,真是奇怪????/
    2.在B列上的回车是正常的,光标可以往B列的下一行跳,但是在C列上回车时,光标又跳到B列了,怪不怪啊.
      

  7.   

    你自己捕捉回车键然后在对ADOQUERY进行操作呀。比如NEXT,或者DBGRID1。SELECTEDINDEX:=X;
      

  8.   

    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      If key=chr(VK_RETURN) then
         with AdoTable1 do   //DBGrid1显示的是AdoTable1中的数据,也可以是AdoQuery
           begin
             Next;
             If EOF then Last;
           end;
         end;
    end;楼主,结贴吧!
      

  9.   

    //编译通过,请使用,随不健全,但绝对能满足你的目的
    procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       inherited;
       if key=13 then
       begin
       //如焦点在第一列最后一行,则增加行,刷新数据并将焦点到最后行
       if (dbgrid1.SelectedIndex=0) and (dbgrid1.DataSource.DataSet.Eof) then
       begin
          DBGrid1.DataSource.DataSet.Append;
          dbgrid1.DataSource.DataSet.Post;
          dbgrid1.DataSource.DataSet.Close;
          dbgrid1.DataSource.DataSet.Open;
          dbgrid1.DataSource.DataSet.Last;
       end
       else
       //其他情况下移一行输入数据
       begin
         dbgrid1.DataSource.DataSet.Next;
       end;
         DBGrid1.SetFocus;
       end;
    end;
      

  10.   

    谢谢smiler007(笑一笑) 和 bxyqt(碧血银枪) 的建议,但你们提供的方法还是不能实现我的功能.
     1.我在DBGRID1上的任一列(如A列)单元格输入数据,然后回车,跳到下一行的单元格(同时也增一行空行,同在A列上),而不是到了这一行的未尾才回车增加新行的.
    2.例如:
                      ID              NAME
                      1001 回车       小王  回车 //当输入完ID后,点击光标在NAME列上输入数据
    光标跳到这里:     1002 回车       小六  回车 //也就是说在同一列上实现回车操作输入数据
                      .....同理       .....同理本人再加30分,请大家继续讨论好的方法.TKS!
      

  11.   

    procedure TFrmPiandeng.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      inherited;
       if key=13 then
       begin
          DBGrid1.DataSource.DataSet.Append;
          DBGrid1.SelectedIndex :=0;
          DBGrid1.SetFocus;   
       end;
    end;
    1.上面这几行代码,我在回车时增加一条空的记录,现在DBGrid1.SelectedIndex :=0;光标不是跳到A列啊,而是回车时光标接向了B列,真是奇怪????/
    2.在B列上的回车是正常的,光标可以往B列的下一行单元格跳(正常),但是不管在C列或是D列上输入后回车时,光标又总跳到B列了(增加一新行),怪不怪啊.
      为什么会这样???
      

  12.   

    DBGrid1.SelectedIndex :=0;//按理说光标应该是指向A列的,现在回车时光标是指向了B列...不明啊?
      

  13.   

    if (key=#13)and not(DBGrid1.DataSource.DataSet.Eof) then
         DBGrid1.DataSource.DataSet.Next;
      

  14.   

    procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      case Key of
      VK_RETURN:
        begin
         if (key=VK_RETURN) and (dbgrid1.selectedindex<ADOQuery1.fieldcount-1) then
           dbgrid1.selectedindex:=dbgrid1.selectedindex+1
         else
           if dbgrid1.selectedindex=ADOQuery1.fieldcount-1 then
             begin
              ADOQuery1.append;
              dbgrid1.selectedindex:=0;
             end;
        end;
      end;
    end;
      

  15.   

    jinjazz(近身剪(充电中...)) 的方法是回车后,光标跳到第一行的下一个单元格,
    grjs2004(在岸边钓不到大鱼,只好下水去摸虾米!) 提供的方法也只能在A列上和输入回车后,光标跳到了B列上,但是在C列,D列等输入回车后,光标又往B列上跳了(新增加了一行)
                     谢谢两位的建议!TKS!
     注意:
      我现在的意思是在A列上纵向回车换行操作,而不是往下一格...NEXT之类的,列和行大家庭要分清.
    例如:
                      (A列)
                       ID                    
                      1001 回车       
    光标跳到这里:     1002 回车      
                      .....回车
                      .....同理       .....同理