procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var I: Integer; begin case Key of VK_RETURN: begin I := TDBGrid(Sender).SelectedIndex; if I + 1 < TDBGrid(Sender).Columns.Count then Inc(I) else I := 0; while (I <> TDBGrid(Sender).SelectedIndex) and ((not TDBGrid(Sender).Columns[I].Visible) or TDBGrid(Sender).Columns[I].ReadOnly) do begin if I + 1 < TDBGrid(Sender).Columns.Count then Inc(I) else I := 0; end; if (I <= TDBGrid(Sender).SelectedIndex) and Assigned(TDBGrid(Sender).DataSource) and Assigned(TDBGrid(Sender).DataSource.DataSet) then TDBGrid(Sender).DataSource.DataSet.Next; TDBGrid(Sender).SelectedIndex := I; end; end; end;
if key=13 then Key=VK_TABzswang(伴水)(* pascal→c *) 你那样的代码我也写得出来,不过我没有2个红星 呵呵 别笑,试试我的代码看和你的有什么区别 如果你的dataset 里有计算字段或lookup字段, 他们的属性大概不一定是readonly=true吧, 你的还不如我的呢,呵呵
sdf163(飘飘摇) : 高人哪!
献丑! 呵呵! procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key = 13 then begin if DBGrid1.SelectedIndex < DBGrid1.FieldCount - 1 then DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + 1 else key := VK_TAB; end; end;
如果dataset 里有计算字段或lookup字段 那我觉得还不如自己一条一条的写 if DBGrid1.SelectedField.FieldName = '列1' then begin DBGrid1.SelectedField := yourdataset.FieldByName('列2'); exit; end; if DBGrid1.SelectedField.FieldName = '列2' then begin DBGrid1.SelectedField := yourdataset.FieldByName('列3'); exit; end; 因为LOOKUP 何计算字段一般应该不会要输入东西巴
to sdf163(飘飘摇):我也记不清楚为什么要这样写了,你的方法确实可行procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_RETURN: Key := VK_TAB; end; end;
Shift: TShiftState);
var
I: Integer;
begin
case Key of
VK_RETURN: begin
I := TDBGrid(Sender).SelectedIndex;
if I + 1 < TDBGrid(Sender).Columns.Count then
Inc(I)
else I := 0;
while (I <> TDBGrid(Sender).SelectedIndex) and
((not TDBGrid(Sender).Columns[I].Visible) or
TDBGrid(Sender).Columns[I].ReadOnly) do begin
if I + 1 < TDBGrid(Sender).Columns.Count then
Inc(I)
else I := 0;
end;
if (I <= TDBGrid(Sender).SelectedIndex) and
Assigned(TDBGrid(Sender).DataSource) and
Assigned(TDBGrid(Sender).DataSource.DataSet) then
TDBGrid(Sender).DataSource.DataSet.Next;
TDBGrid(Sender).SelectedIndex := I;
end;
end;
end;
Key=VK_TABzswang(伴水)(* pascal→c *)
你那样的代码我也写得出来,不过我没有2个红星
呵呵
别笑,试试我的代码看和你的有什么区别
如果你的dataset 里有计算字段或lookup字段,
他们的属性大概不一定是readonly=true吧,
你的还不如我的呢,呵呵
高人哪!
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 13 then
begin
if DBGrid1.SelectedIndex < DBGrid1.FieldCount - 1 then
DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + 1
else
key := VK_TAB;
end;
end;
那我觉得还不如自己一条一条的写
if DBGrid1.SelectedField.FieldName = '列1' then
begin
DBGrid1.SelectedField := yourdataset.FieldByName('列2');
exit;
end; if DBGrid1.SelectedField.FieldName = '列2' then
begin
DBGrid1.SelectedField := yourdataset.FieldByName('列3');
exit;
end;
因为LOOKUP 何计算字段一般应该不会要输入东西巴
Shift: TShiftState);
begin
case Key of
VK_RETURN: Key := VK_TAB;
end;
end;