- - PR -
VB.NETでSHIFT + TAB
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-08 16:03
SHIFT と TABの動きをコードで書きたいのですが、現状、TABは
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean End Function で、ひろう事ができました。しかし、SHIFTを押しながら、TABを押すというのを、 コードで書きたいのです。VB6の時は、KEYDOWNイベントに ANDでつなげて書けたのですが、 VB.NETではどうすればいいのかわかりません。 教えていただけないでしょうか? | ||||
|
投稿日時: 2005-06-08 16:47
こんにちは。
ProcessCmdKey内で判断したいのならば If (keyData = Keys.Tab + Keys.Shift) Then 'ここに処理を書く End If で判断できますよ。 お役に立てれば幸いです。ではでは | ||||
|
投稿日時: 2005-06-08 16:56
If (keyData = Keys.Tab + Keys.Shift) Then
'ここに処理を書く End If これもやってはみたんですが、ひろえないんです。 ちなみに、はいってきた数字は、Keys.Tab = 9,Keys.Shift = 65536 keyData = 65552なんです。何か設定がわるいんでしょうか? SHIFT を押しながらどのKEYを押してもkeyDataの数字は65552になってしまいます。 | ||||
|
投稿日時: 2005-06-08 17:02
こんにちは、じゃんぬ です。
Keys は、列挙体ですので「Or」で結合してください。 「+」では型変換が発生しますから。 それと、keyData から KeyCode を得るには、 Keys.KeyCode との And を取らなければいけませんし、 修飾キーも同じ様に Keys.Modifiers で And を取らないと、 別のキーとの組み合わせの際に拾うことはできません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-06-08 17:56
>オレンジさん >SHIFT を押しながらどのKEYを押してもkeyDataの数字は65552になってしまいます。 If (keyData = Keys.Tab Or Keys.Shift) Then 'ここに処理を書く End If で捕捉できるはずなのですが、なぜでしょうね。 Keys.ShiftKey = 16、Keys.Shift =65536 なので、 もしかしたら「Keys.ShiftKey + Keys.Shift」がきてしまっている・・のかも?(憶測 経験のない現象なので、正確な答えは出せませんが、キーボード等の設定かもしれません。 >じゃんぬさん 今回のように、同一の型同士の結合でも 「+」での結合は、あまりよろしくないということでしょうか? そのあたり、誤って認識していたのかもです・・; | ||||
|
投稿日時: 2005-06-08 18:04
こんにちは、じゃんぬ です。
「+」を使った時点で int になりますから。 Option Strict On にして、以下のコードを試して見ましょう。 1 行目はエラーになります。 Dim key1 As Keys = (Keys.Enter + Keys.Shift) Dim key2 As Keys = (Keys.Enter Or Keys.Shift) エラー内容は「Intger から〜暗黙的な変換はできません」ですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-06-08 18:09
If (keyData = Keys.Tab Or Keys.Shift) Then
'ここに処理を書く End If でひろってはくれたんですが、今度はSHIFTだけ押してもひろってしまいます。 TABはひろってないようです。 何がわるいんでしょうか? | ||||
|
投稿日時: 2005-06-08 18:18
>じゃんぬさん
ということは、 If keyData = (Keys.Tab Or Keys.Shift) Then 'ここに処理を書く End If と If (keyData = Keys.Tab + Keys.Shift) Then 'ここに処理を書く End If では、前者が望ましいということですね。 ご教授ありがとうございます。 >オレンジさん 私の環境では再現しません。 接続しているキーボードを変えてみるなど いろいろと試してみてください。 |