プロが教えるわが家の防犯対策術!

コマンドボタンからの入力は出来ているのですが、キーボードからの入力が出来ません・・・何か良い方法はないでしょうか?
例えば、キーボードで演算子の+を押すとコマンドボタンの+を押したことと同じになればと考えています。

A 回答 (4件)

一度下記のようなルーチンを作った事があります。



常に Command1(n) で押された数字は Text1 に表示して FOCUS は Text1 に戻します。
Command2(n) は 四則演算ボタンです

Private Sub Text1_KeyPress(KeyAscii As Integer)
 Select Case KeyAscii
  Case 48 To 57    ' 数字キー
   Call Command1_Click(KeyAscii - 48)
  Case 61      ' = キー
   Call Command2_Click(0)
  Case 43     ' + キー
   Call Command2_Click(1)
  Case 45      ' - キー
   Call Command2_Click(2)
  Case 42     ' * キー
   Call Command2_Click(3)
  Case 47     '/ キー
   Call Command2_Click(4)
  Case 8     ' BackSpace
   'カーソル位置から一文字前の数字を削除する処理
  Case 13     'Enter キー
   Call Command3_Click
 End Select

 KeyAscii = 0

End Sub

カーソルの位置が TextBox に表示されますので数字の挿入処理も可能です
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど、これなら分かりやすいですね(^^)

お礼日時:2008/07/05 19:12

補足と言うか余談と言うか…


KeyPressでは「文字コード」が取得できますが、KeyDown等では
「キーコード」が取得できます。
KeyDownで処理する場合、テンキーの数字の「キーコード」と、
そうでない(アルファベットの上の横並びの)数字の「キーコード」は、
違いますので、注意が必要です(両方に対応する必要がある)。
同様に、大きいEnterキーと、テンキー部の小さいEnterキーでは
キーコードが違いますし、「+」なども違います
(「+」の場合は更に、「;」のキーコードとKeyDownの引数「Shift」とを
 絡めて判定する必要がある)。

なお、大体のキーコードは、ヘルプ(MSDN)の「キー コード定数」に
載っていますが、「;」のキーコード等、一部は載っていません。
これらについては、簡単な(キーコードを表示するだけとかの)プログラムを
作成して、実際に確認すればいいと思います。

…でもまぁ面倒なので、KeyPressで判定できる文字は全てKeyPressで
処理した方が、楽でしょうね。
    • good
    • 0
この回答へのお礼

確かに面倒ですね・・・なるべくKeyPressで処理してみます。
回答ありがとうございました。

お礼日時:2008/07/05 19:10

フォームのKeyPreviewをTrueにして、フォームのKeyDownで処理する場合。



>コマンドボタンからの入力は出来ているのですが
各コマンドボタンからの処理で
Private Sub keyPlus_Click()
MsgBox "+"
End Sub
Private Sub keyMinus_Click()
MsgBox "-"
End Sub
みたいなのがあるだろうから
Private Sub Form_KeyPress(KeyAscii As Integer)
Select Case Chr(KeyAscii)
Case "+": keyPlus_Click
Case "-": keyMinus_Click
End Select
End Sub
で処理する。

deleteキーなどはKeyPressでは捕まえられないので、必要なら
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyDelete: MsgBox "delete"
End Select
End Sub
とかで処理する。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
KeyPressでは制限があるのですね。すべてKeyPressで作ろうとしていたので、KeyDownも使用してみます。

お礼日時:2008/07/05 19:16

ボタンのキャプションプロパティで設定する文字列を


&+ といった具合にすれば そのボタンのClickイベントが ALTキーと+キーを押した場合に実行されます
この場合 +と _ がボタンに表示されます

別の手段としては Formの KeyPreviewプロパティをTrueにして コントロールより先に Formでキー入力を処理させます
FormのKeyDownイベントなどで
if (( Shift = 0 ) and (KeyCode = vbKeyAdd)) or _
  ((Shift and vbShiftMask ) And ( KeyCOde = 187 ) ) then
  ' + ボタンが押された場合の処理
end if
といった具合に処理を記述しましょう
vbKeyAddはテンキーの『+』です
KeyCode=187はメインキーボードの『れ』のキーのコードです
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
キーコードでそのように処理できるのを始めて知りました。ぜひ、参考にさせていただきます(^^)

お礼日時:2008/07/05 19:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A