Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi】DBGridでEnterキー移動

今回は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月号より)