前回の続きでTabStop制御について。
前回で「何をもってフォーカス可能と判断するか」というのを決めたので、次にやることへ。
- 次にフォーカス可能なセルはどこか、を調査する
というのが次に行う処理。具体的には2方向に分かれることになる。
- 現在のカレントセルより後ろに存在するセルでフォーカス可能か
- 現在のカレントセルより前に存在するセルでフォーカス可能か
まぁこれは当たり前なところで、実際には「前か後ろか」の違いがあるだけ。やることは同じ。
そしてここで注意するのは「次ってどっち?」というところ。
画面の仕様にも関連するけれども、次というのが、「右方向」な場合と「下方向」な場合があるよね。
まぁこれはとりあえず右方向用メソッドと、下方向用メソッドで切り分けておいていいと思う。
後々リファクタリングの段階で、くっつけたりまぜたり分解したりしてしまえばいいかな、と。
''' <summary>同じ行の中で次にフォーカス可能なセルを取得する</summary>
Private Function GetAfterCellCanFocusInRow() As System.Windows.Forms.DataGridViewCell
If Me.CurrentCell Is Nothing Then Return Nothing
Dim checkResult As System.Windows.Forms.DataGridViewCell = Nothing
Dim owningCellIndex As Integer = Me.CurrentRow.Cells.IndexOf(Me.CurrentCell)
For Each gridCell As System.Windows.Forms.DataGridViewCell In Me.CurrentRow.Cells
If Not Me.CheckFocusCell(gridCell) Then Continue For
Dim targetCellIndex As Integer = Me.CurrentRow.Cells.IndexOf(gridCell)
If owningCellIndex >= targetCellIndex Then Continue For
checkResult = gridCell
Exit For
Next
Return checkResult
End Function
やろうとするとこんな感じかな?これはサンプルとして「右方向」に走査するメソッドなので、コレを元にして下方向や左方向を操作するメソッドを用意してあげればいいと思う。そこまでできれば、後はProcess系メソッドのオーバーライドへといけるね。
0 件のコメント:
コメントを投稿