1

ホットキーを使用するアプリケーションを作成しています。設定フォームで、ユーザーはボタンをクリックしてホットキーを設定できます (外観がボタンに設定されたチェックボックス)。その後、ボタンのテキストがそのキーに設定されます。

問題は、キーの名前をユーザーに表示する方法が見つからないことです。ユーザーが (たとえば) リターン キーを押すと、「13」と表示されます。巨大な if / switch ステートメントを使用せずにキー名をユーザーに表示するにはどうすればよいですか?

私の現在のコード:

Private Sub SelectkeyBtn_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles SelectkeyBtn.KeyDown
    If SelectkeyBtn.Checked = True Then
        SelectkeyBtn.Text = e.KeyData
        SelectkeyBtn.Checked = False
    End If
End Sub

編集

私はこのvb.net get name of key from e.keydataを見つけました。

私のコードは次のようになります。

<DllImport("User32.dll")> _
Public Shared Function ToAscii(ByVal uVirtKey As Integer, ByVal uScanCode As Integer, ByVal lpbKeyState As Byte(), ByVal lpChar As Byte(), ByVal uFlags As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Public Shared Function GetKeyboardState(ByVal pbKeyState As Byte()) As Integer
End Function

Public Shared Function GetAsciiCharacter(ByVal uVirtKey As Integer) As Char
    Dim lpKeyState As Byte() = New Byte(255) {}
    GetKeyboardState(lpKeyState)
    Dim lpChar As Byte() = New Byte(1) {}
    If ToAscii(uVirtKey, 0, lpKeyState, lpChar, 0) = 1 Then
        Return Convert.ToChar((lpChar(0)))
    Else
        Return New Char()
    End If
End Function

Private Sub SelectkeyBtn_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles SelectkeyBtn.KeyDown
    If SelectkeyBtn.Checked = True Then
        SelectkeyBtn.Text = GetAsciiCharacter(e.KeyData)
        SelectkeyBtn.Checked = False
    End If
End Sub

これは、キーボードの a、z、f、e、1、+、/. などのキーを押すと機能します。

DELETE、F2、NUMLOCKなどを押すと、ボタンのテキストが空になります..(スクリーンショットを参照) ここに画像の説明を入力

デビッド、

4

0 に答える 0