DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewからのフォーカス移動

環境/言語:[XP/.NET2.0(VB)]
分類:[.NET]

初めての書き込みです。よろしくお願いします。

DataGridViewについて質問があります。
ご存知の方は教えていただけると大変助かります。

内容としてはDataGridViewにフォーカスがある状態でTabキーを押すと
次のButtonにフォーカスが移動するという動作を実現したいです。

ただコントロールを配置しただけではDataGridViewのセル内を
カーソルが移動するだけです。

色々試したのですがうまくいきません。
KeyDownイベントではTabキーを拾ってくれないようですし・・・。

ご教授よろしくお願いします。
> 内容としてはDataGridViewにフォーカスがある状態でTabキーを押すと
> 次のButtonにフォーカスが移動するという動作を実現したいです。

以下の記事が参考になりそうです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5675&forum=7
■No25543に返信(yui_mさんの記事)
> 内容としてはDataGridViewにフォーカスがある状態でTabキーを押すと
> 次のButtonにフォーカスが移動するという動作を実現したいです。

StandardTab プロパティ
お疲れ様です。

DataGridViewを継承し、以下の2メソッドのオーバーライドでいけるようです。
・ProcessCmdKey・・・編集モード時のTabキーを拾う
・ProcessDataGridViewKey・・・非編集モード時のTabキーを拾う


' DataGridViewEx1とTextBox1をFormに配置してください
Public Class Form1

    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        With Me.DataGridViewEx1
            .RowCount = 10
            .ColumnCount = 5
        End With
        MyBase.OnLoad(e)
    End Sub

    Private Sub DataGridViewEx1_TabKeyPressed(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles DataGridViewEx1.TabKeyPressed
        Me.TextBox1.Focus()
    End Sub

End Class


Public Class DataGridViewEx
    Inherits DataGridView

    Public Event TabKeyPressed As EventHandler
    Protected Overridable Sub OnTabKeyPressed(ByVal e As EventArgs)
        RaiseEvent TabKeyPressed(Me, e)
    End Sub

    Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, _
        ByVal keyData As System.Windows.Forms.Keys) As Boolean
        Const WM_KEYDOWN As Integer = &H100
        If msg.Msg = WM_KEYDOWN Then
            If keyData = Keys.Tab Then
                Me.OnTabKeyPressed(EventArgs.Empty)
                Return True
            End If
        End If
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

    Protected Overrides Function ProcessDataGridViewKey( _
        ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
        If e.KeyCode = Keys.Tab Then
            Me.OnTabKeyPressed(EventArgs.Empty)
            Return True
        End If
        Return MyBase.ProcessDataGridViewKey(e)
    End Function

End Class
かぶりました。m(_ _)m

DOBON.NET | プログラミング道 | プログラミング掲示板