ようこそゲストさん

mitc - 日記

メッセージ欄

分類 【.NET】 で検索

一覧で表示する

2007/04/22(日) DataGridViewでエンターキーにより右方向に移動する

はてブ 2007/04/22 16:34 .NETmiff
2009/07/08 コメント欄にてより簡単な方法についての情報提供がありました

DataGridViewは,デフォルトで編集確定時などでのEnterキー押下に対する動作をカレントセル直下のセルにカレントセルを移動するようになっています.
しかし,例えばExcelでは,そのような状況での動作を直下ではなく右方向のセルに移動するように変更でき,その方が便利な時もあります.
DataGridViewでそのような動作を実現するには,どうしたらいいんでしょうか.
調べてみたところ,プロパティの変更ではなくDataGridViewを継承したコントロールを自分で作成するしかないようです.

こことか,Enterキーで下に移動しないで右に移動,こことか,DataGridViewにおいてEnterキーで右隣のセルへキャレットを飛ばすを参照.

そもそもユーザーコントロールを作ったことがほとんど無いんですが,
プロジェクトの作成で「Windowsコントロールライブラリ」を選択し,
そのプロジェクトにクラスを追加して継承コントロールのコードを書き,
ビルドするとできるDLLを参照の追加で取り込めばツールボックスに現れるようになるようです.

しかし,既にフォームに配置しているDataGridViewを置き換えるのは色々と大変です.
例えば,新たにカラムを追加しないといけないし種々のプロパティも元に戻すために弄らないといけません.
もっと楽な方法を…….

そんなわけで,フォームの初期化をしているコード(FormName.Designer.vb)を直接弄ってDataGridViewを新たに作成したUserDataGridViewに置き換える方法を採用するのが良さそうです.
やり方はいたって簡単.
Private Sub InitializeComponent()
  前略
  Me.dataGridViewName = New System.Windows.Forms.DataGridView
  後略
End Sub
となっているところを,
Private Sub InitializeComponent()
  前略
  Me.dataGridViewName = New UserControlNameSpace.UserDataGridView
  後略
End Sub
とするだけ.
イベント処理などは全て上書きしていて,
外見には通常のDataGridViewと区別が付かないので他を変える必要は無さそうです.
特殊なことをやっているならば違ってくるのかもしれませんが.

1: 名無し 『フォームのKeyPreviewプロパティをTrueにして(つまりフォームでキーイベントをフックして)、 フォームのキーイベントで...』 (2009/06/06 18:41)

2: miff 『情報提供ありがとうございます. わざわざユーザコントロールを作成するより簡単にできそうですし,応用範囲も広そうです.』 (2009/07/08 17:18)