移动到最后一条记录时再按一下“下”就会追加一条记录,如果去掉这项功能 procedure TForm1.DataSource1Change(Sender: TObject; Field: TField); begin if TDataSource(Sender).DataSet.Eof then TDataSource(Sender).DataSet.Cancel; end;这个可以屏蔽 掉原来的使用向下箭头或者利用tab键可以增加纪录的功能。 可是不能改为利用回车键来代替,而且在最后一行的最后一列时起作用。
我的做法: 继承TCustomDBGrid,重载procedure KeyDown(var Key: Word; Shift: TShiftState); override;if(Shift=[]) and DataLink.DataSet.Active and ((DataLink.DataSet.RecNo < 0) or (DataLink.DataSet.RecNo = DataLink.DataSet.RecordCount)) then begin if Key = VK_RETURN then Key := VK_DOWN else if Key = VK_DOWN then Key := 0; end;类似这个吧,判断逻辑可以再调整
if (key=char(vk_return)) and (dbgrid1.selectedindex<table1.fieldcount-1 ) then dbgrid1.selectedindex:=dbgrid1.selectedindex+1 else if dbgrid1.selectedindex=table1.fieldcount-1 then begin table1.append; dbgrid1.selectedindex:=0; end;
procedure TForm1.DataSource1Change(Sender: TObject; Field: TField);
begin
if TDataSource(Sender).DataSet.Eof then TDataSource(Sender).DataSet.Cancel;
end;这个可以屏蔽 掉原来的使用向下箭头或者利用tab键可以增加纪录的功能。
可是不能改为利用回车键来代替,而且在最后一行的最后一列时起作用。
继承TCustomDBGrid,重载procedure KeyDown(var Key: Word; Shift: TShiftState); override;if(Shift=[]) and DataLink.DataSet.Active and ((DataLink.DataSet.RecNo < 0) or (DataLink.DataSet.RecNo = DataLink.DataSet.RecordCount)) then
begin
if Key = VK_RETURN then
Key := VK_DOWN
else if Key = VK_DOWN then
Key := 0;
end;类似这个吧,判断逻辑可以再调整
if (key=char(vk_return)) and
(dbgrid1.selectedindex<table1.fieldcount-1 ) then
dbgrid1.selectedindex:=dbgrid1.selectedindex+1
else
if dbgrid1.selectedindex=table1.fieldcount-1 then
begin
table1.append;
dbgrid1.selectedindex:=0;
end;