クライアントアプリを開発する上で、エンターで項目移動、シフトキー+エンターで前項目移動は
よく行われたりします。
その際、よく機能的に上がってくるのが、DataGridView内でエンターで一行下のセルへ移動し
シフト+エンターで一行上のセルに移動。且つ、一行目でシフト+エンターの場合は一つ前のコントロールに
移動というのが多いです。
基本的にそのような場合、DataGridViewにおいて、エンターキーは非編集モードでは自動的に下のセルに移動するよう
になっているので問題ありません。問題なのはシフト+エンターの方です。デフォルトでは、これも同じように下に移動します。
なので、KeyDownイベントを仕込むことによってこれを回避したりします。
以下サンプルです。
void _grid_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter && e.Shift) { if (_grid.CurrentCell.RowIndex != 0) { _grid.CurrentCell = _grid.Rows[_grid.CurrentCell.RowIndex - 1].Cells[0]; } else { // // 現在が先頭行の場合は、一つ前のコントロールに移動. // ProcessTabKey(false); } // // キー処理が行われた事を伝える. // e.Handled = true; } }
補足)この奮闘記ですが、間が大分あいてます。前の記事については、https://sites.google.com/site/gsfzero1/ から参照されると分かりやすいです。
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場