Преобразовать ключевой код в ключ char

Как преобразовать код ключа в keychar в .NET?

Ответ 1

В VB.NET:

ChrW(70)

В С# вы можете использовать:

(char) 70

Ответ 2

Я решил это, используя класс библиотеки из user32.dll. Я бы предпочел класс Framework, но не смог найти его, чтобы это сработало для меня.

Imports System.Runtime.InteropServices

Public Class KeyCodeToAscii

    <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

End Class

Ответ 3

Convert.ToChar(65)

Ответ 4

Попробуйте следующее:

Char.ConvertFromUtf32(e.KeyValue)

Ответ 5

Я нашел этот фрагмент весьма полезным при обнаружении нажатия клавиши ввода:

Private Sub StartValue_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles StartValue.KeyPress
    If ChrW(13).ToString = e.KeyChar And StartValue.Text = "" Then
        StartValue.Text = "0"
    End If
End Sub

Я нашел, что это достойное решение для того, чтобы люди пытались отправить нулевое значение в текстовое поле. Это просто заставляет 0, но он использует кнопку "enter enter enter" для запуска.

Ответ 6

Convert.ToChar(Keys.Enter);

Ответ 7

Я не могу ответить DaveH, но если вы сделаете так, как он говорит, все будет хорошо!

  Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  Public sub harry()
    For i = 1 to 255
      If Chr(i) = Convert.ToChar(Keys.Enter) Then
          Label1.Text &= " [Enter] "
      ElseIf Chr(i) = Convert.ToChar(Keys.Delete) Then
          Label1.Text &= " [Delete] "
      End If
    Next i
  End Sub

Ответ 8

Вот пример с моей стороны:)

#region Just for fun :D

private string _lastKeys = "";

private readonly Dictionary<string, string[]> _keyChecker = _
    new Dictionary<string, string[]>
        {
            // Key code to press, msgbox header, msgbox text
            {"iddqd", new[] {"Cheater! :-)", "Godmode activated!"}},
            {"idkfa", new[] {"Cheater! :-)", "All Weapons unlocked!"}},
            {"aAa", new[] {"Testing", "Test!"}},
            {"aaa", new[] {"function", "close"}}
        };

private void KeyChecker(KeyPressEventArgs e)
{
    _lastKeys += e.KeyChar;

    foreach (var key in _keyChecker.Keys)
        if (_lastKeys.EndsWith(key))
            if (_keyChecker[key][0] != "function")
                MessageBox.Show(_keyChecker[key][1], _keyChecker[key][0]);
            else
                KeyCheckerFunction(_keyChecker[key][1]);

    while (_lastKeys.Length > 100)
        _lastKeys = _lastKeys.Substring(1);
}

private void KeyCheckerFunction(string func)
{
    switch (func)
    {
        case "close":
            Close();
            break;
    }
}

private void FormMain_KeyPress(object sender, KeyPressEventArgs e)
{
    KeyChecker(e);
}

#endregion Just for fun :D

Ответ 9

String.fromCharCode(event.keyCode)