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?
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.
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:
Wohl nicht die einfachste Lösung, sondern diejenige, die die Lösung genau modelliert.
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.
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.
Diese Funktion wird tun, was Sie wollen:
%Vor%Nennen Sie es so:
%Vor%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 ())