2008-10-29 35 views

Respuesta

6

En VB.NET:

ChrW(70) 

En C# se puede lanzar:

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

Esto no es correcto (como todas las otras respuestas hasta el momento). Puede funcionar para la capital 'A', pero falla, p. para combinaciones de teclas y para los números en el teclado numérico. Una posible solución es escuchar el evento 'KeyPress' en Windows Forms o en el evento' TextInput' en WPF/Silverlight. –

+1

El uso de 'Convert.ToChar (190)' (OEMPeriod) me dio '¾' y no' .' como esperaba. – MCattle

-3

String.fromCharCode (event.keyCode)

+5

Esto es Javascript, no .NET, para cualquiera que mire esto. – x4000

0

Convert.ToChar (Keys. Entrar);

+0

keys.numpad9 = "i", creo que estaba buscando convertir a un personaje coincidente. – dwidel

0

Parece que no puedo responder a DaveH, pero si haces lo que él dice, ¡funciona bien!

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

¿Y cuál es el uso de llamar a WinAPI en sus códigos? –

1

me encontré con este fragmento a ser bastante útil en la detección de una pulsación de tecla de la tecla 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 

he encontrado que esto es una solución decente a que la gente tratando de presentar un valor nulo en una caja de texto. Esto simplemente fuerza a 0, pero usa la "detección de entrar presionada" para ejecutar.

5

Lo resolví utilizando una clase de biblioteca de user32.dll. Preferiría una clase Framework, pero no pude encontrar una, así que esto funcionó para mí.

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 es la función clave, +1. Sin embargo, consulte los comentarios en MSDN: * Los parámetros suministrados a la función ToAscii pueden no ser suficientes para traducir el código de la tecla virtual, porque una clave muerta anterior se almacena en el diseño del teclado. * Http://msdn.microsoft.com /en-us/library/windows/desktop/ms646316(v=vs.85).aspx --- Además, considere usar ToUnicode en su lugar. – peterchen

2

Prueba esto:

Char.ConvertFromUtf32(e.KeyValue) 
+0

Este método no tiene en cuenta el estado Shift. Por ejemplo, keycode/value 65 devuelve 'A', pero la tecla que se presionó fue 'a' sin Shift. – Christoph

-1

Aquí un ejemplo de mi lado :)

#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

No hay una conversión de código clave a char en esta respuesta. – Christoph