- PR -

DataGridViewでフォーカスの移動を制御したい。

1
投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-03-01 20:53
初めて質問します。
WindowsXP VB2005EEでソフトを作っています。質問はDataGridViewのカーソル
移動の制御方法についてです。DataGridViewで[Enter]キーを押すと同一列の
一行下に移動するのが既定となっているようですが、同一行で次のように移動さ
せたく考えています。
1列目→3列目→2列目→4列目→次の行の1列目
この動作をさせるべく、DataGridViewのKeyDownイベントハンドラーに次のような
コードを記載しました。

If e.KeyCode = Keys.Enter Then
Dim Ro As Integer = DataGridView1.CurrentCell.RowIndex
Dim Co As Integer = DataGridView1.CurrentCell.ColumnIndex
Dim RoX As Integer = DataGridView1.RowCount
If Co = 0 Then
DataGridView1.CurrentCell = DataGridView1(2, Ro)
ElseIf Co = 1 Then
DataGridView1.CurrentCell = DataGridView1(3, Ro)
ElseIf Co = 2 Then
DataGridView1.CurrentCell = DataGridView1(2, Ro)
ElseIf Co = 3 Then
If RoX - 2 = Ro Then
BindingSource1.AddNew()
End If
DataGridView1.CurrentCell = DataGridView1(0, Ro + 1)
End If
End If
e.Handled = True '--KeyDownイベントの機能終了

このコードで[Enter]キーだけを押すと目的通りの動作を行いますが何かの文字
や数字を入力して[Enter]キーを押すと1行下へ移動してしまいます。
1列目→2列目→3列目→4列目→次の行の1列目と一般的な順序での移動は
http://dobon.net/vb/dotnet/datagridview/enterkeymoveright.html
で勉強させていただきましたが、DataGridViewで[Enter]キーを押してフォーカス
の動きをカスタマイズする方法はないのでしょうか。
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2008-03-01 21:52
DataGridViewのイベントだけでは難しいと思います。
今回の現象は「編集の終了時」のキー制御と思われますので、
恐らく記載されたコードには制御が来ていないのではないか、と思います。

解決方法としては、DataGridViewを継承しProcessDislogKeyメソッドでとか、
そういったあたりで自分は対応しています。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-03-01 22:48
Ahfさん。早速体験談を含めて説明いただき、ありがとうございます。大変助かりました。

引用:

Ahfさんの書き込み (2008-03-01 21:52) より:
DataGridViewのイベントだけでは難しいと思います。今回の現象は「編集の終了時」のキー制御と思われますので、恐らく記載されたコードには制御が来ていないのではないか、と思います。
解決方法としては、DataGridViewを継承しProcessDislogKeyメソッドでとか、そういったあたりで自分は対応しています。


ProcessDislogKeyメソッドはDataGridViewクラスの派生クラスを作成し
ProcessDialogKeyメソッドをオーバーライドするときに使ったことがありますので
少し研究してみます。

_________________
1

スキルアップ/キャリアアップ(JOB@IT)