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 + ○という判定が必要?
まず、以下のように、電卓に必要そうなキーのみを判定したい
☆☆☆☆☆☆☆☆
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 という、テンキー用の判定を入れる必要がある。
参考:キーコード定数

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