2009-07-19 7 views
0

Ich verwende den folgenden Code, um zu entscheiden, ob ein '.' (Punkt) wurde in ein WebBrowser-Steuerelement eingegeben:HtmlElementEventArgs KeyPressedCode Confusion

private void body_KeyUp(object sender, HtmlElementEventArgs e) 
    { 
     if (e.KeyPressedCode == '.') 
     { 
      // Do something 
     } 
    } 

Nach Msdn KeyPressedCode gibt einen ASCII-Wert. Was ich beim Breakpointing bekomme, ist '190', wenn ich ein '.' jedoch. Dies ist nicht einmal in der Standard-ASCII-Tabelle aufgeführt. Offensichtlich konnte ich einfach auf 190 testen, aber ich befürchte, dass KeyPressedCode unterschiedliche Werte auf verschiedenen Systemen mit unterschiedlichen Codepages, Sprachen usw. zurückgeben kann.

Können Sie mir bitte erklären, warum KeyPressedCode '190' anstelle von '46' zurückgibt und wie ich dieses Problem "sicher" lösen kann?

Interessanterweise ist der Rückgabewert für '' (Leerzeichen) immer korrekt ('32'). Spielen mit System.Text.Encoding.GetEncoding und verschiedene Codepages hat das Problem nicht gelöst, ich habe jedoch nicht viel Erfahrung mit Codepages.

Antwort

1

Nur eine wilde Vermutung, aber Haben Sie die Werte von e.AltKeyPressed, e.CtrlKeyPressed und e.ShiftKeyPressed? Hoffe, Sie sehen, was ich bekomme ...

2

Sie waren wahrscheinlich mit einer verdrahteten Tastatur, weil Schlüsselcode 190 ist ein OEM-Nummer Schlüsselcode .. Wenn Sie einen Laptop benutzten, würde er sich wie erwartet verhalten.