いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

DataGridView入門記-20 (Shift+Enterで一行上に移動)(KeyDown, Handled, CurrentCell, Keys, ProcessTabKey)

クライアントアプリを開発する上で、エンターで項目移動、シフトキー+エンターで前項目移動は
よく行われたりします。


その際、よく機能的に上がってくるのが、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/ から参照されると分かりやすいです。



================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。