- PR -

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

投稿者投稿内容
00_Number
常連さん
会議室デビュー日: 2003/11/04
投稿数: 37
投稿日時: 2003-11-04 15:54
お世話になっております。

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は表示されません。
間違いの指摘や関連情報をお寄せ頂きたいと思います。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-11-06 10:00
DataGridのセル内にカーソルがある場合の対処なら、以下のような
方法があります。

http://db-appli.com/xoops/modules/newbb/viewtopic.php?topic_id=193&forum=20&0

DataGridTextBoxColumn.TextBoxのイベントを利用する、という方法です。
00_Number
常連さん
会議室デビュー日: 2003/11/04
投稿数: 37
投稿日時: 2003-11-06 10:36
小野@EACさんご回答どうもありがとうございます。

実は紹介していただいた記事を以前私も読みまして、同じように実行してみたのですが、
数値や文字のキーはt_KeyPressで拾えたのですが、tabキーやEnterキーはこちらで拾う事が出来ませんでした。
私のやり方がまずいのかもしれませんが、別の記事でオーバーライドする方法が紹介されておりましたので
そちらを試していた次第です。

相変わらず成功しておりませんので、引き続き情報をいただけるとうれしく思います。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-11-06 10:44
00_Numberさん、こんにちは。

引用:

数値や文字のキーはt_KeyPressで拾えたのですが、tabキーやEnterキーはこちらで拾う事が出来ませんでした。


KeyDown イベントではどうですか?
00_Number
常連さん
会議室デビュー日: 2003/11/04
投稿数: 37
投稿日時: 2003-11-06 10:52
きくちゃんさんご回答どうもありがとうございます。

tabキーやEnterキーはKeyDownイベントでも取れませんでした。
KeroKero
常連さん
会議室デビュー日: 2003/11/06
投稿数: 26
投稿日時: 2003-11-06 15:38
同じコードを試してみましたが,当方ではちゃんと動きました。
ただし
If (keyData = Keys.Enter) Then

If (keyData = Keys.Tab) Then
としました。
00_Number
常連さん
会議室デビュー日: 2003/11/04
投稿数: 37
投稿日時: 2003-11-06 16:08
KeroKeroさんお返事ありがとうございます。

Keys.Enterは実験中に修正し忘れた間違いです。紛らわしくて申し訳ありません。

最初にお尋ねしたコードで動きましたか。
という事は私のDataGridのプロパティでどこかおかしい部分があるのでしょうか。
正常動作した時にソース以外で気をつけた点について教えていただければ幸いです。
またはもし支障がなければ正常動作した時のソースコード全体を見せて頂けると非常に嬉しく思います。
KeroKero
常連さん
会議室デビュー日: 2003/11/06
投稿数: 26
投稿日時: 2003-11-06 17:32
FormのInitializeComponent()の中に
Me.MyDataGrid1=New MyDataGrid()
Me.MydataGrid1.NextControl=Button3
を入れたぐらいです。Button3はTabキー押下時の移動先です。

場合によっては,mControlの中身をデバッグウィンドウに出力して,確かめた方がいいかもしれません。

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