2008-10-29 21 views

Odpowiedz

6

W VB.NET:

ChrW(70) 

W języku C# można oddać:

(char) 70 
2
Convert.ToChar(65) 
+3

To nie jest poprawne (jak wszystkie inne odpowiedzi do tej pory). Może działać dla kapitolu "A", ale zawiedzie np. dla kombinacji klawiszy i liczb na klawiaturze numerycznej. Możliwym rozwiązaniem jest słuchanie zdarzenia 'KeyPress' w Windows Forms lub zdarzenia' TextInput' w WPF/Silverlight. –

+1

Użycie 'Convert.ToChar (190)' (OEMPeriod) dało mi '¾', a nie' .' jak się spodziewałem. – MCattle

-3

String.fromCharCode (event.keyCode)

+5

To jest JavaScript, nie .NET, dla każdego, kto na to patrzy. – x4000

0

Convert.ToChar (klawisze. Wchodzić);

+0

keys.numpad9 = "i", myślę, że chciał przekształcić się w pasującą postać. – dwidel

0

Nie mogę odpowiedzieć DaveH, ale jeśli robisz tak, jak on mówi, to działa dobrze!

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 
+1

A jaki jest pożytek z połączenia z WinAPI w Twoich kodach ?! –

1

Znalazłem ten fragment będzie raczej pomocny w wykrywaniu naciśnięcie klawisza z klawisz Enter:

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 

Uważam, że jest to przyzwoite rozwiązanie posiadające ludzie próbują złożyć zerową wartość w pole tekstowe. To po prostu wymusza 0, ale używa "wykrytego wejścia naciśniętego", aby uruchomić.

5

Rozwiązałem to przy użyciu klasy biblioteki z pliku user32.dll. Wolałbym klasy Framework, ale nie mogłem go znaleźć, więc to działało dla mnie.

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 
+2

ToAscii jest kluczową funkcją +1. Jednak zobacz uwagi w MSDN: * Parametry dostarczone do funkcji ToAscii mogą nie być wystarczające do przetłumaczenia kodu klucza wirtualnego, ponieważ poprzedni martwy klucz jest przechowywany w układzie klawiatury. * Http://msdn.microsoft.com /pl-pl/library/windows/desktop/ms646316(v=vs.85).aspx --- Należy również rozważyć użycie ToUnicode. – peterchen

2

Spróbuj tego:

Char.ConvertFromUtf32(e.KeyValue) 
+0

Ta metoda nie uwzględnia statusu przesunięcia. Na przykład kod/wartość 65 zwraca "A", ale naciśnięty klawisz to "a" bez Shift. – Christoph

-1

tutaj przykład z mojej strony :)

#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 
+0

W tej odpowiedzi nie ma kodu klucza do konwersji znaków. – Christoph

Powiązane problemy