我创建了一个表示数字小键盘的表单,用于触摸屏应用程序,它包含键0123456789
以及逗号,
键。每个键都是一个自定义控件的实例,其中包含一个名为Key的属性,我在设计时设置了它:
<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
为了轻松找到按下的键,在包含的表单中我使用所有键构建HashSet
:
Private keys As HashSet(Of Char)
....
For Each c As Control In ...
keys.Add(...)
Next
然后我会听KeyDown
事件:
AddHandler Me.KeyDown, AddressOf KeyHasBeenPressed
然后在处理程序中:
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
问题在于逗号,
。 Key
属性已在设计器中设置为,
,但在运行时,测试keys.Contains
失败,因为e.KeyValue=188
和e.KeyCode=Oemcomma {188}
。
处理这种情况的最佳方法是什么?我想使用“特殊”键,如逗号和退格键。
还要考虑i8n:我的物理数字键盘显示一个点.
,但是当按下它时,必须始终将其视为逗号,
。
答案 0 :(得分:1)
如果您使用KeyPress
而不是KeyDown
,那么您将能够使用KeyChar
的{{1}}属性,该属性应返回','