Commandをフォームに設置するとForm_KeyDownが動かなくなります。
Commandボタンの周りにある黒い奴をどうにかして外せませんか?
そして、フォームでkeyDown操作を行わせたいです。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Label1 = Chr(KeyCode)
End Sub
ボタンの絵のImageコントロールを配置してはいかがでしょう?
フォームの表示領域の外にTextBoxなどを置いて最初のフォーカスをそのテキストボックスにしてみるとか。
KeyDownに効くかどうかはわかりませんけど…。
KeyPreview(フォームのプロパティ)ってどうでしょうか?
以前確かこれを切り替えて、うまくやれた記憶がありますけど。
たかみちえさんの言う通りフォームのKeyDownを受け取りたいだけならば、
フォームのKeyPreviewをTrueにすればよいのですが、フォーカスも当てたくないならば、いくつか方法がありますがnanashiさんの方法が簡単だと思います。
みなさんの意見を取り入れて色々考えてやって見たのですが悩んでいます。プログラムの過程でそのコマンドボタンを押すためnanashiさんのような方法ではできませんでした。このコマンドボタンを押した時、コマンドボタンから黒い奴を外すが出来るような奴はないですか?
タイピングソフトを作っているのですが。コマンドボタンは3つ、開始キーとリタイアキーと終了キーで、
エンターを押すと開始キーが動作しフォームに打つ文字を表示させてゲームが開始される。エスケープキーを押すとリタイアキーが動作してゲームをリタイアする。開始キーが押されてゲームが開始されたときはエスケープは押せない。ゲーム開始されたら60秒間でゲームが終わるまで開始ボタンは押せない。といった具合です。
基本的にはキー操作ができ、ボタンのクリックイベントも起こしたいのでしょ?
だったら、Sayさんが述べているようにボタンの画像を埋め込み、nanashiさんの述べている事を行なったらいいのでは?
例えば、ImageコントロールとLabelコントロールを貼ってこんなコードを書いてみました。
Private Sub Form_KeyPress(KeyAscii As Integer)
Label1.Caption = Chr(KeyAscii)
Select Case KeyAscii
Case vbKeyReturn
Label1.Caption = "Enterが押されたよ"
Case vbKeyEscape
Label1.Caption = "Escが押されたよ"
End Select
End Sub
Private Sub Image1_Click()
Label1.Caption = "Image1_Click!"
End Sub
60秒の制御はTimerコントロールとフラグ等を使ってKeyPressの所で制御してみては?
ゲーム動作中はボタンのEnabledをFalseにすれば良いんじゃないですか?
Falseにすると困るならゲームが始まったら別のコントロールにフォーカスを移すとか。
KeyPressで上手くいきました。みなさんどうもありがとう御座います。勉強しなおしてきます。
解決
ツイート | ![]() |