• ベストアンサー

VB6で電卓を作っているのですが誰か教えてください

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

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

  • ベストアンサー
  • emsuja
  • ベストアンサー率50% (1065/2116)
回答No.3

一度下記のようなルーチンを作った事があります。 常に 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 に表示されますので数字の挿入処理も可能です

teruteru2
質問者

お礼

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

その他の回答 (3)

回答No.4

補足と言うか余談と言うか… KeyPressでは「文字コード」が取得できますが、KeyDown等では 「キーコード」が取得できます。 KeyDownで処理する場合、テンキーの数字の「キーコード」と、 そうでない(アルファベットの上の横並びの)数字の「キーコード」は、 違いますので、注意が必要です(両方に対応する必要がある)。 同様に、大きいEnterキーと、テンキー部の小さいEnterキーでは キーコードが違いますし、「+」なども違います (「+」の場合は更に、「;」のキーコードとKeyDownの引数「Shift」とを  絡めて判定する必要がある)。 なお、大体のキーコードは、ヘルプ(MSDN)の「キー コード定数」に 載っていますが、「;」のキーコード等、一部は載っていません。 これらについては、簡単な(キーコードを表示するだけとかの)プログラムを 作成して、実際に確認すればいいと思います。 …でもまぁ面倒なので、KeyPressで判定できる文字は全てKeyPressで 処理した方が、楽でしょうね。

teruteru2
質問者

お礼

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

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

フォームの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 とかで処理する。

teruteru2
質問者

お礼

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

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ボタンのキャプションプロパティで設定する文字列を &+ といった具合にすれば そのボタンの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はメインキーボードの『れ』のキーのコードです

teruteru2
質問者

お礼

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

関連するQ&A