結論から言うと、簡単にはできないので難しいやりかた(DataGridViewの派生クラスを自作する方法)がたくさん紹介されているのだと思います。
まず、提示いただいたコードはDataGridViewのEnterイベントで処理しようとしていますが、残念ながらこれはENTERキー押下時に発生するイベントではありません。
DataGridViewコントロールが入力されたとき(他のコントロールからフォーカスが移ってきたときなど)に発生するイベントです。
キー押下時に発生するイベントとしては、KeyDownイベントというものがあります。
しかしDataGridViewではENTERキー押下に特別な動きが与えられているようで、実際ENTERキー押下時の動作を確認すると、
①ENTERキーを押下
②CellLeaveイベント発生
③CellEndEditイベント発生(セル編集中だった場合)
④CellEnterイベント発生(1つ下のセルのEnterイベント)
⑤KeyDownイベント発生
という具合で、KeyDownイベントの発生前に元のセルを抜けて下のセルに移動する処理が行われてしまっています。
KeyDownイベントが発生した時点ではもう下のセルに移動しており、元々キーを押したときにいたセルの情報など知ることもできない状態です。
ここらへんが既存のDataGridViewのイベントだけで処理するのが難しい理由なのだと思います。
見栄えを気にしないのなら、
Private Sub DataGridView_Keydown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView.KeyUp
If e.KeyCode = Keys.Enter Then
SendKeys.Send("{UP}") '上に移動
SendKeys.Send("{TAB}") '右に移動
e.Handled = True
End If
End Sub
のようなコードで結果的として右に移動した状態にする
ことはできます。
ごまかしのようなやり方ですし、EditModeプロパティの設定にも左右されるため全く推奨はできません。。(^_^;
がんばって派生クラスを作成したほうがよさそうですね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/01 04:37 編集