2008-10-29 10 views

답변

6

:

ChrW(70) 

C#에서 당신이 캐스팅 할 수 있습니다

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

. 국회 의사당 'A'의 경우 작동하지만 예를 들어 실패합니다. 키 조합 및 숫자 키패드의 경우 가능한 해결책은 Windows Forms에서'KeyPress' 이벤트를 청취하거나 WPF/Silverlight에서'TextInput' 이벤트를 청취하는 것입니다. –

+1

'Convert.ToChar (190)'(OEMPeriod)를 사용하면 내가 기대했던 것처럼 '¾'이 아니라 '¾'이되었습니다. – MCattle

-3

대신 String.fromCharCode (event.keyCode)

+5

이것은 JavaScript를 사용하는 사용자에게 .NET이 아닌 Javascript입니다. – x4000

0

Convert.ToChar (키. 들어가다);

+0

keys.numpad9 = "i", 나는 그가 일치하는 문자로 변환하려한다고 생각합니다. – dwidel

0

DaveH에게 답장을 보낼 수없는 것 같습니다.하지만 그가 말한대로하면 괜찮습니다. 나는이 사람들이에 null 값을 제출하려고있는에 괜찮은 솔루션이 될 것으로

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 

을 :

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

그리고 코드에서 WinAPI에 대한 호출 사용법은 무엇입니까?! –

1

나는 키 입력에서 키 누름을 감지에 오히려 도움이 될이 조각을 발견 텍스트 상자. 이것은 단지 0을 강제하지만, "enter enter being pressed"를 사용하여 실행합니다.

5

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

ToAscii가 핵심 기능인 +1입니다. 그러나 MSDN에서 발언을 참조하십시오. * 이전 죽은 키가 키보드 레이아웃에 저장되어 있기 때문에 ToAscii 함수에 제공된 매개 변수로 가상 키 코드를 변환하기에 충분하지 않을 수 있습니다. * http://msdn.microsoft.com /en-us/library/windows/desktop/ms646316(v=vs.85).aspx --- 또한 ​​ToUnicode를 대신 사용해보십시오. – peterchen

2

이 시도 : 여기

Char.ConvertFromUtf32(e.KeyValue) 
+0

이 방법은 Shift 상태를 고려하지 않습니다. 예를 들어, 키 코드/값 65는 'A'를 반환하지만 눌려진 키는 Shift를 사용하지 않고 'a'였습니다. – Christoph

-1

예를 내 측면에서 :)이 (다른 답변처럼 지금까지) 정확하지

#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

이 답변에는 변환을위한 키 코드가 없습니다. – Christoph