DataGridでのTabキー押下処理を変更するには


00_Number  2003-11-05 00:49:21  No: 109668

お世話になっております。

DataGridのセルでTabキーを押下した場合に通常は右隣にフォーカスが移動するところを
次のコントロールに移動するように変更したいと思っています。

いろいろな掲示板で調べたところ
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5675&forum=7
のような記事を発見し、その通りやってみたつもりだったのですがうまくいきませんでした。
ちなみにコンパイルはきちんと通りました。

以下に自分で書いたソースを記述します。

Public Class MyDataGrid
    Inherits System.Windows.Forms.DataGrid

    Const WM_KEYDOWN As Integer = &H100
    Private mControl As Windows.Forms.Control

    Public Property NextControl() As Control
        Get
            Return mControl
        End Get
        Set(ByVal Value As Control)
            mControl = Value
        End Set
    End Property

    Protected Overrides Function ProcessCmdKey _
        (ByRef msg As System.Windows.Forms.Message, _
        ByVal keyData As System.Windows.Forms.Keys) As Boolean

        If msg.Msg = WM_KEYDOWN Then
            If (keyData = Keys.Enter) Then
                mControl.Focus()
                Return True
            Else
                Return MyBase.ProcessCmdKey(msg, keyData)
            End If
        End If

        'デバック用
        Debug.WriteLine("aaa")

        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

    Public Overrides Function PreProcessMessage(ByRef msg As Message) As Boolean
        If msg.Msg = WM_KEYDOWN AndAlso (msg.WParam.ToInt32() And Keys.KeyCode) = Keys.Enter Then
            MyBase.ProcessTabKey(True)
            Return True
        Else
            Return False
        End If
    End Function

End Class

ちなみにデバックウィンドゥにデバック用の文字aaaは表示されません。
間違いの指摘や関連情報をお寄せ頂きたいと思います。


だっちゃん  2003-11-05 02:25:00  No: 109669

こんちは。

今回のご質問では、Classを利用してTabキーの処理を変更しようとされてますが、
DataGridコントロールのTabActionプロパティをdbgColumnNavigation(1)から
dbgControlNavigation(0)に変更してあげればご希望の動きをすると思うのですが
いかがでしょうか?

TabActionの設定は、DataGridコントロールのプロパティページを開いて
キーボードタブ内のTabActionを変更するか、
FormのLoadイベントで設定すれば良いと思います。


すぅ  2003-11-05 02:53:51  No: 109670

だっちゃんさんご回答どうもありがとうございます。

ご指摘のあったTabActionについてなのですが、プロパティウィンドゥ内に設定項目がなかったので
調べてみたところ、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbconcomparisonofadodatagridandadoplusdatagrid.asp
のサイトに自由に設定出来なくなったと書かれていました。残念です。

オーバーライドする方法については現在も試しているのですがうまくいきません。
こちらの処理を応用してDataGrid上でEnterキーを押された場合についても
作成したいと考えているのですが。
引き続きよろしくお願い致します。


00_Number  2003-11-05 03:57:29  No: 109671

だっちゃんさん申し訳ありません。普通の掲示板で使うHNで書き込んでしまいました。
上のすぅの書き込みは私のものです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加