goo blog サービス終了のお知らせ 

HAPPY MIND

毎日の記憶を残すためのブログ

VB.NET ② KeyPress、KeyDown キーコード定数

2009-12-01 13:19:55 | 仕事memory
KeyPressイベントで、電卓機能を作成

まず、以下のように、電卓に必要そうなキーのみを判定したい

☆☆☆☆☆☆☆☆
Private Sub CalcKeyBoardChk_KeyPress _
(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles CalcKeyBoardChk.KeyPress
    Select Case e.KeyChar
        Case Chr(Keys.D0) To Chr(Keys.D9)
            ' 0~9
        Case Chr(Keys.Add)
            ' 加算
        Case Chr(Keys.Subtract)
            ' 減算
        Case Chr(Keys.Multiply)
            ' 乗算
        Case Chr(Keys.Divide)
            ' 除算
        Case Chr(Keys.Decimal)
            ' 小数点
        Case Chr(Keys.Enter)
            ' Enter
        Case Chr(Keys.Back)
            ' Backspace
        Case Chr(Keys.Keys.Delete)
            ' Delete
        Case Else
            ' ↑以外
    End Select
End Sub
☆☆☆☆☆☆☆☆

しかし、これでは、Keys.Add、Keys.Subtract、Keys.Multiply、Keys.Divide、Keys.Decimalが
それぞれ"+"、"-"、"*"、"/"、"."ではなく、異なる文字に変換され判定ができない。(なんでだかはよく分からない。。)

しかもKeyPressでは、Deleteキーを押下してもイベントが発生しない。
KeyPressは、文字キーが押下された場合しか発生しないため。


そこで、KeyDownイベントに変えてみる。

☆☆☆☆☆☆☆☆
Private Sub CalcKeyBoardChk_KeyDown _
(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles CalcKeyBoardChk.KeyDown
    Select Case e.KeyCode
        Case Keys.D0 To Keys.D9
            ' 0~9
        Case Keys.Add
            ' 加算
        Case Keys.Subtract
            ' 減算
        Case Keys.Multiply
            ' 乗算
        Case Keys.Divide
            ' 除算
        Case Keys.Decimal
            ' 小数点
        Case Keys.Enter
            ' Enter
        Case Keys.Back
            ' Backspace
        Case Keys.Delete
            ' Delete
        Case Else
            ' ↑以外
    End Select
End Sub
☆☆☆☆☆☆☆☆

これだとKeys.Add、Keys.Subtract、Keys.Multiply、Keys.Divide、Keys.Decimal、Keys.Deleteが判定できる。

が、また別の問題が発生。
0~9は、文字と同じ枠と、テンキーの2箇所にある。
Case Keys.D0 To Keys.D9 では、文字と同じ枠にある数字しか判定しない。
コードが違うためである。
Case Keys.NumPad0 To Keys.NumPad9 という、テンキー用の判定を入れる必要がある。

参考:キーコード定数

Visual Basic .NET における Key Code 定数の変更点


残課題は、文字と同じ枠にある、"+"、"-"、"*"、"/"の判定。
Shift + ○という判定が必要?


最新の画像もっと見る