I made a form representing a numeric keypad, for a touchscreen application, and it contains the keys 0123456789
, along with the comma ,
key. Each key is an instance of a custom control with a property called Key which I set at design time:
<Browsable(True),
DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)>
Private _key As Char
Property Key As Char
Get
Return _key
End Get
Set(value As Char)
_key = value
Me.Text = _key
End Set
End Property
To easily find the pressed key, in the containing form I build a HashSet
with all the keys:
Private keys As HashSet(Of Char)
....
For Each c As Control In ...
keys.Add(...)
Next
Then I listen for the KeyDown
event:
AddHandler Me.KeyDown, AddressOf KeyHasBeenPressed
Then in the handler:
Private Sub KeyHasBeenPressed(sender As Object, e As KeyEventArgs)
If keys.Contains(ChrW(e.KeyValue)) Then
' handle the key pressed event...
End If
End Sub
The problem is with the comma ,
key. The Key
property has been set to ,
in the designer but at runtime the test keys.Contains
fails because e.KeyValue=188
and e.KeyCode=Oemcomma {188}
.
What would be the best way to handle this situation? I want to use "special" keys like the comma and maybe the backspace key.
Also consider i8n: my physical numeric keypad shows a dot .
but when pressed it must always be treated as a comma ,
instead.