现在我只能按TAB挑到下一个字段,按回车不行,我加了以下CODE也不行procedure TfrmA1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
{ 判断是按执行键}
if not (ActiveControl is TDBGridEh) then
Begin { 不是在TDbgrid控件内}
key:=#0;
perform(WM_NEXTDLGCTL,0,0); {移动到下一个控件}
end else
if (ActiveControl is TDBGridEh) then {是在 TDbgrid 控件内}
begin
with TDbgridEh(ActiveControl) do
if Selectedindex<(FieldCount-1) then
Selectedindex:=Selectedindex+1 //移动到下一字段
else
begin
sendmessage(dbgrideh1.Handle,wm_keydown,vk_tab,0);
dbgrideh1.Col:=1;
Selectedindex:=0;
end;
end;
end;
begin
if Key=#13 then
{ 判断是按执行键}
if not (ActiveControl is TDBGridEh) then
Begin { 不是在TDbgrid控件内}
key:=#0;
perform(WM_NEXTDLGCTL,0,0); {移动到下一个控件}
end else
if (ActiveControl is TDBGridEh) then {是在 TDbgrid 控件内}
begin
with TDbgridEh(ActiveControl) do
if Selectedindex<(FieldCount-1) then
Selectedindex:=Selectedindex+1 //移动到下一字段
else
begin
sendmessage(dbgrideh1.Handle,wm_keydown,vk_tab,0);
dbgrideh1.Col:=1;
Selectedindex:=0;
end;
end;
end;
procedure NextField(dbgDBGrid: TDBGridEh);
begin
if dbgDBGrid.SelectedIndex < (dbgDBGrid.Fieldcount - 1) then
begin
dbgDBGrid.SelectedIndex := dbgDBGrid.SelectedIndex + 1;
if dbgDBGrid.ReadOnly = False then
while ((dbgDBGrid.Columns.Items[dbgDBGrid.SelectedIndex].ReadOnly) and
(dbgDBGrid.SelectedIndex < dbgDBGrid.Fieldcount - 1)) do
dbgDBGrid.SelectedIndex := dbgDBGrid.SelectedIndex + 1;
end
else if dbgDBGrid.SelectedIndex = dbgDBGrid.Fieldcount - 1 then
begin
dbgDBGrid.DataSource.DataSet.Next;
if ((dbgDBGrid.DataSource.DataSet.Eof) and (dbgDBGrid.ReadOnly = False))
then
dbgDBGrid.DataSource.DataSet.Append;
dbgDBGrid.SelectedIndex := 0;
end
else
dbgDBGrid.SelectedIndex := 0;
end;调用:
procedure Tform1.DBGridEh1KeyPress(Sender: TObject;var Key: Char);
begin
if Key = #13 then
NextField(DBGridEh1);
end;
procedure Tfrm.DBGrid7KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_return then
PostMessage((Sender As TDbGrid).Handle,wm_keydown,vk_tab,0);
end;
好像是enterastab但是印象不是很深了
TDBGRIDEH设置回车跳至下一个字段不需要写代码:在 OPERATIONEH 下有个 DGENTERASTAB,该为TRUE就可以了,不过如果你将FORM的KEYPRIVEW设置为TRUE,有时会出问题。
TDBGRIDEH设置回车跳至下一个字段不需要写代码:在 OPERATIONEH 下有个 DGENTERASTAB,该为TRUE就可以了,不过如果你将FORM的KEYPRIVEW设置为TRUE,有时会出问题。