用于处理KeyChars的.NET KeyDown事件

时间:2013-01-21 10:20:49

标签: vb.net keyboard-events keycode

我创建了一个表示数字小键盘的表单,用于触摸屏应用程序,它包含键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=188e.KeyCode=Oemcomma {188}

处理这种情况的最佳方法是什么?我想使用“特殊”键,如逗号和退格键。

还要考虑i8n:我的物理数字键盘显示一个点.,但是当按下它时,必须始终将其视为逗号,

1 个答案:

答案 0 :(得分:1)

如果您使用KeyPress而不是KeyDown,那么您将能够使用KeyChar的{​​{1}}属性,该属性应返回','