こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【KeyDown】キーコードについて

Visual Basic について質問です。

「KeyDown」「KeyUp」で、「キーを押した時、離した時に…」というプログラムが書けますよね。

  Private Sub Form1_KeyDown(…省略) Handles Me.KeyDown
    If e.KeyCode = Keys.A Then
       …(1)
    ElseIf e.KeyCode = Keys.B Then
       …(2)
    ElseIf e.KeyCode = Keys.D0 Then
       …(3)
    End If
  End Sub

こんな感じで、
「A」キーが押されたら処理(1)を実行
「B」キーが押されたら処理(2)を実行
「0」キーが押されたら処理(3)を実行
という風なプログラムを作っているのですが、
右の方にある「@」キーや、
カギカッコのキーや、
ひらがなの「れ」「け」「む」「ね」「る」「め」「ろ」のキーや、
ENTERキーの指定方法が分かりません。

このキーが使えないと、プログラムとして成り立たなくなってしまうので、非常に困っています。

↓このページに、いろいろなキーの指定方法が書かれていましたが、
  ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.keys(VS.80).aspx
どれがどのキーなのか分かりませんでした。
適当にそれらしい物でやってみましたが、どのキーを押しても反応無しでした。
「Enter」キーは、「Enter」で指定するように書かれていましたが、「Enter」キーを押しても無反応でした。

方法を教えていただければ幸いです。

投稿日時 - 2007-07-12 17:14:49

QNo.3161582

すぐに回答ほしいです

質問者が選んだベストアンサー

No.2です。
>とにかく「れ(;,+)」のキーが押された時、離された時、を指定できれば良いのですが、このような指定をすることはやはり無理なのでしょうか…
ボタン操作をラベルへ表示する為、FormにLabelを2つ配置して下さい。
以下のプログラムをコピー&ペーストして下さい。
↓↓↓↓↓↓↓↓↓↓
'ボタンが押された瞬間のイベントをラベルへ表示する
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 13
Me.Label1.Caption = "Form_KeyDown" & "[Enter]が押されたときの処理"
Case 187
Me.Label1.Caption = "Form_KeyDown" & "[れ]が押されたときの処理"
Case 192
Me.Label1.Caption = "Form_KeyDown" & "[@]が押されたときの処理"
Case Else
Me.Label1.Caption = "Form_KeyDown" & " Case " & KeyCode & " を追加する。"
End Select
End Sub

'ボタンが離れた瞬間のイベントをラベルへ表示する
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 13
Me.Label2.Caption = "Form_KeyUp" & "[Enter]が押されたときの処理"
Case 187
Me.Label2.Caption = "Form_KeyUp" & "[れ]が押されたときの処理"
Case 192
Me.Label2.Caption = "Form_KeyUp" & "[@]が押されたときの処理"
Case Else
Me.Label2.Caption = "Form_KeyUp" & " Case " & KeyCode & " を追加する。"
End Select
End Sub
↑↑↑↑↑↑↑↑↑↑
※「KeyPress」は、ボタンを長押ししている間に発生するイベントです。
elseで表示されるKeyCodeをcaseで追加すればボタンを押した時/離した時のイベント処理が可能だと思います。
但し、「Shift+れ=+」等の組合せが必要な操作は、KeyPressを使用しないと処理が困難だと思います。

投稿日時 - 2007-07-15 00:04:00

お礼

ご丁寧にありがとうございます。
おかげ様で、少々予定とは異なりましたがプログラムを完成させることが出来ました。
感謝しています(^-^)

投稿日時 - 2007-07-23 18:54:08

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

WindowsXP VB6.0 です。
「KeyDown」「KeyUp」では、[Shift + れ(;) = +]の様なイベントは取得出来ないと思いますので、「KeyPress」をご使用されてはいかがでしょうか?

【ご参考】
Private Sub Form_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKey1
MsgBox "[1]が押されたときの処理"
Case vbKey2
MsgBox "[2]が押されたときの処理"
Case vbKeyA
MsgBox "[Shift + A]が押されたときの処理"
Case 43
MsgBox "[Shift + れ(;) = +]が押されたときの処理"
Case 59
MsgBox "[れ(;)]が押されたときの処理"
Case 64
MsgBox "[@]が押されたときの処理"
Case 97
MsgBox "[a]が押されたときの処理"
Case Else
MsgBox "Case " & KeyAscii & " を追加する。"
End Select
End Sub
見当違いかもしれませんが、ご参考になれば幸いです。

投稿日時 - 2007-07-13 02:51:09

お礼

ご回答ありがとうございます。
KeyPressという物があるのですね。

しかし、私が作ろうと思っているプログラムは、例えば「れ」「+」「;」を区別する必要がありません。
とにかく「れ(;,+)」のキーが押された時、離された時、を指定できれば良いのですが、このような指定をすることはやはり無理なのでしょうか…

「KeyPress」は、数字で指定できるのがとても便利そうですが、キーを押した時の処理と離した時の処理を区別出来ないところが欠点ですね。

質問者の分際で偉そうな事を書いてしまいましたが、ご回答ありがとうございました!
どうにかしてKeyPressを使えないか、いろいろ試してみます。

投稿日時 - 2007-07-13 23:17:55

ANo.1

こんばんわ、Enterなら
e.KeyCode = keys.enter
で判断できるはずですが。
formモジュールでKeyDownイベント
についてよく理解できませんが。
ひらがなは別にして
MsgBox(e.KeyCode)
で値が戻るはずなので
http://hp.vector.co.jp/authors/VA014436/prg_memo/prg_all/prg/002.html
で返却値からキーステータスを
判断してみては如何でしょうか。

投稿日時 - 2007-07-12 19:49:12

お礼

ご回答ありがとうございます。
実は、私は今年5月からVisual Basicを始めたばかりの超初心者です。
これを先に書いておくべきでした。

さっそく、教えていただいたMsgBox(e.KeyCode)を試してみます。
参考URLも貼っていただき、本当にありがとうございました。

投稿日時 - 2007-07-13 23:00:37

あなたにオススメの質問