- ベストアンサー
VB6で電卓を作っているのですが誰か教えてください
コマンドボタンからの入力は出来ているのですが、キーボードからの入力が出来ません・・・何か良い方法はないでしょうか? 例えば、キーボードで演算子の+を押すとコマンドボタンの+を押したことと同じになればと考えています。
- みんなの回答 (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 に表示されますので数字の挿入処理も可能です
その他の回答 (3)
- K-Sogacchi
- ベストアンサー率53% (50/93)
補足と言うか余談と言うか… KeyPressでは「文字コード」が取得できますが、KeyDown等では 「キーコード」が取得できます。 KeyDownで処理する場合、テンキーの数字の「キーコード」と、 そうでない(アルファベットの上の横並びの)数字の「キーコード」は、 違いますので、注意が必要です(両方に対応する必要がある)。 同様に、大きいEnterキーと、テンキー部の小さいEnterキーでは キーコードが違いますし、「+」なども違います (「+」の場合は更に、「;」のキーコードとKeyDownの引数「Shift」とを 絡めて判定する必要がある)。 なお、大体のキーコードは、ヘルプ(MSDN)の「キー コード定数」に 載っていますが、「;」のキーコード等、一部は載っていません。 これらについては、簡単な(キーコードを表示するだけとかの)プログラムを 作成して、実際に確認すればいいと思います。 …でもまぁ面倒なので、KeyPressで判定できる文字は全てKeyPressで 処理した方が、楽でしょうね。
お礼
確かに面倒ですね・・・なるべくKeyPressで処理してみます。 回答ありがとうございました。
- hotosys
- ベストアンサー率67% (97/143)
フォームの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 とかで処理する。
お礼
回答ありがとうございます。 KeyPressでは制限があるのですね。すべてKeyPressで作ろうとしていたので、KeyDownも使用してみます。
- redfox63
- ベストアンサー率71% (1325/1856)
ボタンのキャプションプロパティで設定する文字列を &+ といった具合にすれば そのボタンの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はメインキーボードの『れ』のキーのコードです
お礼
回答ありがとうございます。 キーコードでそのように処理できるのを始めて知りました。ぜひ、参考にさせていただきます(^^)
お礼
回答ありがとうございます。 なるほど、これなら分かりやすいですね(^^)