1

タッチスクリーン アプリケーション用に数字キーパッドを表すフォームを作成しました。これ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ですべてのキーを使用してa を作成します。

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 も考慮してください。私の物理的なテンキーにはドット.が表示されますが、押されたときは常にコンマとして扱われなければなりません,

4

1 に答える 1

1

KeyPressではなくを使用すると、「、」を返すプロパティKeyDownを使用できるようになりますKeyCharKeyPressEventArgs

于 2013-01-21T11:08:45.527 に答える