- - PR -
DataGridでのTabキー押下処理を変更するには
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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は表示されません。 間違いの指摘や関連情報をお寄せ頂きたいと思います。 | ||||
|
投稿日時: 2003-11-06 10:00
DataGridのセル内にカーソルがある場合の対処なら、以下のような
方法があります。 http://db-appli.com/xoops/modules/newbb/viewtopic.php?topic_id=193&forum=20&0 DataGridTextBoxColumn.TextBoxのイベントを利用する、という方法です。 | ||||
|
投稿日時: 2003-11-06 10:36
小野@EACさんご回答どうもありがとうございます。
実は紹介していただいた記事を以前私も読みまして、同じように実行してみたのですが、 数値や文字のキーはt_KeyPressで拾えたのですが、tabキーやEnterキーはこちらで拾う事が出来ませんでした。 私のやり方がまずいのかもしれませんが、別の記事でオーバーライドする方法が紹介されておりましたので そちらを試していた次第です。 相変わらず成功しておりませんので、引き続き情報をいただけるとうれしく思います。 | ||||
|
投稿日時: 2003-11-06 10:44
00_Numberさん、こんにちは。
KeyDown イベントではどうですか? | ||||
|
投稿日時: 2003-11-06 10:52
きくちゃんさんご回答どうもありがとうございます。
tabキーやEnterキーはKeyDownイベントでも取れませんでした。 | ||||
|
投稿日時: 2003-11-06 15:38
同じコードを試してみましたが,当方ではちゃんと動きました。
ただし If (keyData = Keys.Enter) Then は If (keyData = Keys.Tab) Then としました。 | ||||
|
投稿日時: 2003-11-06 16:08
KeroKeroさんお返事ありがとうございます。
Keys.Enterは実験中に修正し忘れた間違いです。紛らわしくて申し訳ありません。 最初にお尋ねしたコードで動きましたか。 という事は私のDataGridのプロパティでどこかおかしい部分があるのでしょうか。 正常動作した時にソース以外で気をつけた点について教えていただければ幸いです。 またはもし支障がなければ正常動作した時のソースコード全体を見せて頂けると非常に嬉しく思います。 | ||||
|
投稿日時: 2003-11-06 17:32
FormのInitializeComponent()の中に
Me.MyDataGrid1=New MyDataGrid() Me.MydataGrid1.NextControl=Button3 を入れたぐらいです。Button3はTabキー押下時の移動先です。 場合によっては,mControlの中身をデバッグウィンドウに出力して,確かめた方がいいかもしれません。 |