- PR -

VB.NETでSHIFT + TAB

投稿者投稿内容
オレンジ
会議室デビュー日: 2005/02/03
投稿数: 17
投稿日時: 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/05/07
投稿数: 13
お住まい・勤務地: 北海道はでっかいどう
投稿日時: 2005-06-08 16:47
こんにちは。

ProcessCmdKey内で判断したいのならば


If (keyData = Keys.Tab + Keys.Shift) Then
'ここに処理を書く
End If

で判断できますよ。

お役に立てれば幸いです。ではでは
オレンジ
会議室デビュー日: 2005/02/03
投稿数: 17
投稿日時: 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になってしまいます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-06-08 17:02
こんにちは、じゃんぬ です。

Keys は、列挙体ですので「Or」で結合してください。
「+」では型変換が発生しますから。

それと、keyData から KeyCode を得るには、
Keys.KeyCode との And を取らなければいけませんし、
修飾キーも同じ様に Keys.Modifiers で And を取らないと、
別のキーとの組み合わせの際に拾うことはできません。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
会議室デビュー日: 2005/05/07
投稿数: 13
お住まい・勤務地: 北海道はでっかいどう
投稿日時: 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」がきてしまっている・・のかも?(憶測
経験のない現象なので、正確な答えは出せませんが、キーボード等の設定かもしれません。

>じゃんぬさん
今回のように、同一の型同士の結合でも
「+」での結合は、あまりよろしくないということでしょうか?
そのあたり、誤って認識していたのかもです・・;
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 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/02/03
投稿数: 17
投稿日時: 2005-06-08 18:09
If (keyData = Keys.Tab Or Keys.Shift) Then
'ここに処理を書く
End If

でひろってはくれたんですが、今度はSHIFTだけ押してもひろってしまいます。
TABはひろってないようです。

何がわるいんでしょうか?
会議室デビュー日: 2005/05/07
投稿数: 13
お住まい・勤務地: 北海道はでっかいどう
投稿日時: 2005-06-08 18:18
>じゃんぬさん

ということは、
If keyData = (Keys.Tab Or Keys.Shift) Then
'ここに処理を書く
End If



If (keyData = Keys.Tab + Keys.Shift) Then
'ここに処理を書く
End If

では、前者が望ましいということですね。
ご教授ありがとうございます。


>オレンジさん
私の環境では再現しません。
接続しているキーボードを変えてみるなど
いろいろと試してみてください。

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