お世話になっております。
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は表示されません。
間違いの指摘や関連情報をお寄せ頂きたいと思います。
こんちは。
今回のご質問では、Classを利用してTabキーの処理を変更しようとされてますが、
DataGridコントロールのTabActionプロパティをdbgColumnNavigation(1)から
dbgControlNavigation(0)に変更してあげればご希望の動きをすると思うのですが
いかがでしょうか?
TabActionの設定は、DataGridコントロールのプロパティページを開いて
キーボードタブ内のTabActionを変更するか、
FormのLoadイベントで設定すれば良いと思います。
だっちゃんさんご回答どうもありがとうございます。
ご指摘のあったTabActionについてなのですが、プロパティウィンドゥ内に設定項目がなかったので
調べてみたところ、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbconcomparisonofadodatagridandadoplusdatagrid.asp
のサイトに自由に設定出来なくなったと書かれていました。残念です。
オーバーライドする方法については現在も試しているのですがうまくいきません。
こちらの処理を応用してDataGrid上でEnterキーを押された場合についても
作成したいと考えているのですが。
引き続きよろしくお願い致します。
だっちゃんさん申し訳ありません。普通の掲示板で使うHNで書き込んでしまいました。
上のすぅの書き込みは私のものです。
ツイート | ![]() |