这段代码应该就是你要的,按回车光标就跳到下一个单元格。 如果在行的最后一列,会跳到下一行的第一格。 如果在表的最后一列,会跳到第一行的第一格。 procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin if DBGrid1.SelectedIndex = DBGrid1.FieldCount-1 then begin DBGrid1.SelectedIndex := 0; DBGrid1.DataSource.DataSet.Next; if DBGrid1.DataSource.DataSet.Eof then DBGrid1.DataSource.DataSet.First; end else DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex+1; end; end;
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin DBGrid1.DataSource.DataSet.Next; if DBGrid1.DataSource.DataSet.Eof then DBGrid1.DataSource.DataSet.First; end; end;
最简单的代码 procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=13 then Key := vk_Tab; end;
if Key = #13 then { 如果按下了回车键 } begin Key := #0; { 吃掉回车键 } if dbgrid1.Selectedindex<dbgrid1.FieldCount-1 then dbgrid1.Selectedindex:=dbgrid1.Selectedindex+1 else dbgrid1.Selectedindex:=0; end;
if key = #13 then sendmessage(activecontrol.handle,wm_keydown,vk_tab,0);
如果在行的最后一列,会跳到下一行的第一格。
如果在表的最后一列,会跳到第一行的第一格。
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
if DBGrid1.SelectedIndex = DBGrid1.FieldCount-1 then
begin
DBGrid1.SelectedIndex := 0;
DBGrid1.DataSource.DataSet.Next;
if DBGrid1.DataSource.DataSet.Eof then
DBGrid1.DataSource.DataSet.First;
end
else
DBGrid1.SelectedIndex:=DBGrid1.SelectedIndex+1;
end;
end;
begin
if Key = #13 then
begin
DBGrid1.DataSource.DataSet.Next;
if DBGrid1.DataSource.DataSet.Eof then
DBGrid1.DataSource.DataSet.First; end;
end;
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then
Key := vk_Tab;
end;
begin
Key := #0; { 吃掉回车键 }
if dbgrid1.Selectedindex<dbgrid1.FieldCount-1 then
dbgrid1.Selectedindex:=dbgrid1.Selectedindex+1
else
dbgrid1.Selectedindex:=0;
end;
sendmessage(activecontrol.handle,wm_keydown,vk_tab,0);