2016-03-24 8 views
2

Ich versuche einen Tastendruck zu machen, wandle ihn in eine Zeichenkette um und wandle die Zeichenkette dann in ihren ursprünglichen keypress int-Wert zurück.Warum werden einige Schlüssel, die einmal in Zeichenfolgen konvertiert wurden, nicht wieder in ihre ursprünglichen Schlüsselcodes konvertiert?

Angenommen, ich habe dies:

KeysConverter kc = new KeysConverter(); 

string keyChar = kc.ConvertToString((System.Windows.Forms.Keys)e.KeyCode); 
int key = (int)e.KeyCode; 

Debug.WriteLine(e.KeyCode + " " + (int)e.KeyCode); 

Key tempkey; 
Enum.TryParse(keyChar, out tempkey); 

Debug.WriteLine(tempkey + " " + (int)tempkey); 

Alles scheint gut zu funktionieren. Zum Beispiel:

Testfall: F5

Ausgang: F5 116 F5 116

Testfall: `(Oemtilde)

Ausgang: Oemtilde 192 Oemtilde 192

Testfall: X

Ausgang: X 88 X 88

gut ... ich zu sein scheint

Dann tun:

Testfall: 1

Ausgang: D1 49 Lbutton 1

Warum werden einige Schlüssel nicht auf ihre ursprünglichen Werte zurückkonvertiert?

Bemerkenswerte Schlüssel hat es nicht mit gearbeitet:

1,2,3, ..., 9,0, Einfügen, Löschen, Bild ab, Bild auf

Edit:

Testfall: 1 (auf dem Tastenfeld auf der rechten Seite der Tastatur)

Ausgang: NumPad1 97NumPad1 97

+0

Sind die Tasten, die Ihnen Probleme auf der Tastatur geben? –

+0

Nur die, die ich aufgelistet habe (1,2,3, ..., 9,0, Einfügen, Löschen, Bild ab, Bild auf) sind die, die mir ein Problem bereiten. Die Tastatur auf der rechten Seite der Tastatur gibt kein Problem. Sogar die '*', '/' Zeichen sind gut – John

Antwort

1

Ihr Code hat eine fundamenta l Fehler. KeysConverter wandelt den Schlüssel in eine Zeichenfolge um, sodass Keys.D1 (der Code für den Schlüssel 1 in der obersten Zeile) in die Zeichenfolge "1" konvertiert wird, da dies der Schlüssel ist. Enum.TryParse versucht, dies zu verstehen, aber es gibt kein Keys.1 Tag (offensichtlich), so dass es einfach die Zeichenfolge als den numerischen Wert "1" konvertiert. (Keys) 1 ist in der Tat Keys.LButton.

Ich bin mir nicht sicher, was Sie mit dieser Roundtrip-Konvertierung erreichen möchten. Ich weiß also nicht, wie Sie Ihren Code korrigieren können, aber das erklärt, was Sie sehen.

+0

Gegeben ein e.KeyCode für den Button '1', wie würden Sie es in seinen' int'-Wert konvertieren, dann in seinen String-Namen, und dann diesen String zurück in seinen 'int'-Wert konvertieren? – John

+0

@ John: Sie könnten das tun, indem Sie den Wert einschalten - 'Keys.D0' bis' Keys.D9' sind ordentlich in Ordnung. Aber diese Umwandlung erscheint nicht in erster Linie notwendig, denn wenn Sie den Schlüsselcode '49' als' Schlüssel'-Instanz haben wollen, können Sie einfach '(Schlüssel) 49' oder im Code Ihrer Frage '(Schlüssel) e.KeyCode'. Und wenn Sie eine Zeichenfolge wünschen, die eindeutig den Schlüsselcode darstellt, konvertieren Sie einfach den numerischen Wert - 'e.KeyCode.ToString()'. –

+0

Ahhhh. Der 'e.KeyCode.ToString()' hat mir gerade geholfen. Vieles wird geschätzt. Vielen Dank. – John

Verwandte Themen