キーボードのキーを押したら○○する

タグの編集
投稿者 MANGA41  (小学生) 投稿日時 2010/5/3 17:03:30
はじめまして。小学四年です。
小学二年くらいからVBプログラムやってます。()
質問ですが、
「キーボードのキーを押したら○○する」の方法がわかりません。
「キーボードのキーを押す」のではなく、キーボードを
押すと、処理をするというものです。
○○は、メッセージボックスでいいです。
こんど投稿プログラムも、させていただく予定です。
誰か「キーボードのキーを押したら○○する」の方法
知っている人は教えてください。
投稿者 るきお  (社会人) 投稿日時 2010/5/3 18:05:51
こんにちは。

キーボードのどのキーが押されても区別なく○○するという
ことでいうことであれば、

まず、フォームのKeyPreviewプロパティをTrueに設定し、

その後でプログラムでフォームのKeyDownイベントにやりたいことを記述します。
例:
    
Private Sub Form1_KeyDown(ByVal sender As System.ObjectByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    'ここに○○を書く 
End Sub


たとえば、押されたキーコードをフォームのタイトルに表示するには次のように書きます。
    
Private Sub Form1_KeyDown(ByVal sender As System.ObjectByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    Me.Text = e.KeyCode
End Sub


フォームのKeyPreviewをTrueにすることが重要ですのでお忘れないようにしてください。
この例だと、キーを押しっぱなしにすると何度も処理が繰り返されます。

これでやりたいことは合っていますか?
投稿者 るきお  (社会人) 投稿日時 2010/5/3 18:26:15
補足します。

上で紹介した方法でも
[TAB]キーや、[無変換]キーなど一部のキーでは反応できません。

もうちょっと使用するシーンが限定されれば全部のキーに反応することもできるかもしれません。
投稿者 MANGA41  (小学生) 投稿日時 2010/5/3 18:46:04
ありがとうございました。
Me.KeyPreviw = True

しなくても動きました。(忘れました)
プロパティには表示されませんでした。
しても、変化はありませんでした。
キーの指定もしたかったのですが、それは
お父さんに教えてもらいました。※ほかのキーもしました。
Private Sub Form1_KeyDown(ByVal sender As System.ObjectByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
Dim K = e.KeyCode
If K = Keys.A
MessageBox.Show("A")
'※省略して書いています。 
End If
End Sub

e.KeyCodeの内容は、Keys.○○としても表せるのはわかりやすいですね。
投稿者 るきお  (社会人) 投稿日時 2010/5/3 21:11:17
こんにちは。

解決したようですが、KeyPreviewについて補足します。

フォーム上にイベントを受け取れるコントロールがない時にキーが押されたときはKeyPreviewがFalseの場合でもForm側のKeyDownなどのイベントでキーが押されたことを知ることができます。
今回の、MANGA41さんのプログラムはおそらくその状態になっていたのでKeyPreviewを設定しなくても良かったのだと思います。

いいプログラムを作ってくださいね。
投稿者 MANGA41  (小学生) 投稿日時 2010/5/4 20:57:06
そうなんですか。KeyPreviewプロパティは、キーを押した時
他のコントロールに左右されないようにあるというわけですね。
ありがとうございました。
投稿プログラムにも使わせていただきます。