keydown过程写如下代码: if (key=vk_left) and (dbgrid1.GetActiveCol=1) then begin //如果不需要拉动水平条即可看到最后一列就这样: dbgrid1.SelectedIndex:=dbgrid1.GetColCount; //如果列很多,需要拉动水平条才能看到最后一列: // DBGrid1.SetActiveField(最后一列的字段名); end;
keydown过程写如下代码: var FistCol:integer; begin FistCol:=dbgrid1中第一列的字段在表中的位置; if (key=vk_left) and (dbgrid1.SelectedField.FieldNo=FistCol) then begin dbgrid1.SelectedIndex:=dbgrid1.FieldCount; end; end;
procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key=vk_left) and (dbgrid1.SelectedIndex=0) then begin dbgrid1.SelectedIndex:=dbgrid1.FieldCount-1; end; if (key=vk_right) and (dbgrid1.SelectedIndex=dbgrid1.FieldCount-1) then begin dbgrid1.SelectedIndex:=0; end; end;
procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key=vk_left) and (dbgrid1.SelectedIndex=0) then dbgrid1.SelectedIndex:=dbgrid1.FieldCount-1 else if (key=vk_right) and (dbgrid1.SelectedIndex=dbgrid1.FieldCount-1) then dbgrid1.SelectedIndex:=0; end;
你可以在按左键的事件里把这个键拦住,
把它变成end键就可以了
又不是循环的,怎么可以这样移动。自己处理keypress事件好了。
if (key=vk_left) and (dbgrid1.GetActiveCol=1) then
begin
//如果不需要拉动水平条即可看到最后一列就这样:
dbgrid1.SelectedIndex:=dbgrid1.GetColCount;
//如果列很多,需要拉动水平条才能看到最后一列:
// DBGrid1.SetActiveField(最后一列的字段名);
end;
var
FistCol:integer;
begin
FistCol:=dbgrid1中第一列的字段在表中的位置;
if (key=vk_left) and (dbgrid1.SelectedField.FieldNo=FistCol) then
begin
dbgrid1.SelectedIndex:=dbgrid1.FieldCount;
end;
end;
Shift: TShiftState);
begin
if (key=vk_left) and (dbgrid1.SelectedIndex=0) then
begin
dbgrid1.SelectedIndex:=dbgrid1.FieldCount-1;
end;
if (key=vk_right) and (dbgrid1.SelectedIndex=dbgrid1.FieldCount-1) then
begin
dbgrid1.SelectedIndex:=0;
end;
end;
Shift: TShiftState);
begin
if (key=vk_left) and (dbgrid1.SelectedIndex=0) then
dbgrid1.SelectedIndex:=dbgrid1.FieldCount-1
else if (key=vk_right) and (dbgrid1.SelectedIndex=dbgrid1.FieldCount-1) then
dbgrid1.SelectedIndex:=0;
end;