今回はDBGridでのEnterキーを使ったセル移動の拡張をご説明します。
アプリケーションのキー操作でEnterキーを押したときには次項目へ移動させたい場合があります。
動作としてはTabキーの動作になりますので、EnterキーをTabキーに置き換える方法が簡単です。
例えば編集可能状態のときにDBGridのOnKeyDownで次のように記述すると、
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_RETURN then
Key := VK_TAB;
end;
下記のような動作となり、一度のEnterキーで次のセルへ移動しません。
セルへ移動
→ Enterキー(1回目)
→ セルが編集モードになる
→ Enterキー(2回目)
→ 次セルへ移動
※DBGrid側で常に編集状態にする設定(OptionsのdgAlwaysShowEditor=True)
にしている場合は1回のEnterキーで次セルへ移動できますが、
これだけのためにその設定を行うのは非効率です。
このためForm側ののOnKeyDown(FormKeyDown)イベントで次のように記述します。
このときFormのKeyPreviewプロパティをTrueに設定して下さい。
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ActiveControl = DBGrid1 then
begin
if Key = VK_RETURN then
begin
Key := VK_TAB;
end;
end;
end;
このように実装するとDBGridでのEnterキーがTabキーに置き換わり、
フォーカス移動が自然な形で動作します。是非カスタマイズにご活用ください。
なお、入力可能に設定したフィールドにのみフォーカス遷移させたい場合は、
TDBGrid・TClientDataSetのいずれかで対象のフィールドをReadOnly=Trueに設定します。
(ミガロ.情報マガジン「MIGARO News!!」Vol.121 2010年12月号より)
(ミガロ.情報マガジン「MIGARO News!!」Vol.209 2018年4月号より)