Wie konvertiere ich einen "Keys" Enum Wert in ein "int" Zeichen in C #?

7

Das scheint etwas zu sein, das einfach sein sollte, aber ich habe eine harte Zeit herauszufinden, was hier passieren muss.

Wenn im Ereignishandler "KeyDown" "e.KeyValue" eine Zahl ist, möchte ich sie als Zahl behandeln und sie als int speichern. Also, wenn ich "8" auf dem Nummernblock drücke, will ich nicht "Numpad8" Ich möchte den Int-Wert 8, den ich hinzufügen oder subtrahieren kann oder was auch immer.

Also, wie konvertiere ich vom KeyValue zu einem int?

    
Andy Stampor 20.04.2009, 18:32
quelle

10 Antworten

14

Ich würde mit dieser Lösung gehen:

%Vor%

... wenn der Punkt darin bestand, den numerischen Wert der Beschriftung des Schlüssels zu erhalten, der eingegeben wurde.

    
Tommi Forsström 20.04.2009, 18:43
quelle
5

So etwas sollte gut funktionieren: (Bearbeitet)

%Vor%     
John Fisher 20.04.2009 18:48
quelle
5

Fakten: Die Tastatur hat Tasten. Einige Tasten stellen Zahlen dar und manche nicht.

Problem (umformuliert): Gib einen numerischen Wert zurück, der durch einen Schlüssel dargestellt wird, wenn der Schlüssel eine Zahl darstellt.

Um das Problem zu lösen, ist es notwendig zu wissen, welche Schlüssel (außer der Menge aller Schlüssel) Zahlen darstellen, sowie den genauen numerischen Wert, den jede (Zahlen-) Taste repräsentiert.

Nach meinem Wissen gibt es keinen einfachen Weg, eine solche Zuordnung aus dem Framework zu bekommen.

Hinweis: Die Tatsache, dass D0-D9 und NumPad0-NamPad9 in der Keys-Enumeration sequenziell sind, ist zufällig und es ist unbegründet, sich darauf zu verlassen, dass diese Werte sequentiell geordnet werden.

Also wäre die Lösung:

  1. Bestimmen Sie, ob der angegebene Schlüssel eine Zahl darstellt.
  2. Gibt den numerischen Wert des Schlüssels zurück, wenn der Schlüssel eine Zahl darstellt.
%Vor%

Wohl nicht die einfachste Lösung, sondern diejenige, die die Lösung genau modelliert.

    
THX-1138 20.04.2009 21:20
quelle
2

Je nachdem, wie viele Schlüssel Sie verfolgen, wäre die einfachste Methode, einen Auswahlfall zu erstellen (oder eine Anweisung in C # zu wechseln, denke ich?), der den Wert Ihres Keydowns und abhängig von diesem Wert überprüfen würde ein Wert für eine ganze Zahl, der angemessen ist.

    
TheTXI 20.04.2009 18:34
quelle
2

Wenn Sie NUMERIC-Werte möchten, müssen Sie eine switch(e.KeyCode) -Anweisung erstellen und den Schlüssel auswerten und Ihren eigenen int erstellen. Es gibt keine einfache Möglichkeit, ein Keys in einen numerischen Wert umzuwandeln, der die Nummer des Schlüssels darstellt. Der nächste, den Sie bekommen könnten, könnte das ASCII-Äquivalent sein, das noch übersetzt werden müsste.

    
Adam Robinson 20.04.2009 18:43
quelle
1

Könnten Sie stattdessen nur auf das KeyPress -Ereignis warten? Es wird das Zeichen geben, das tatsächlich gedrückt wurde.

    
Samuel 20.04.2009 18:43
quelle
1

Diese Funktion wird tun, was Sie wollen:

%Vor%

Nennen Sie es so:

%Vor%     
John Rasch 20.04.2009 18:47
quelle
0

Der KeyValue repräsentiert den Zeichencode für den gedrückten Schlüssel. Um seinen numerischen Wert zu erhalten, sollten Sie das Zeichen für den Schlüssel finden, der gedrückt wurde, und dann von einem Zeichen zu einer ganzen Zahl analysieren.

Etwas wie Convert.ToInt32 (e.KeyCode.ToString ())

    
Robin Day 20.04.2009 18:46
quelle
0

Oder erstellen Sie eine Erweiterungsmethode und nennen Sie sie wie

%Vor%

wo die Erweiterungsmethode

ist %Vor%     
salgo60 20.04.2009 18:59
quelle
-3

int i = (int) e.KeyValue;

    
Jeremy 20.04.2009 18:35
quelle

Tags und Links