Fakten: Die Tastatur hat Tasten. Manche Tasten stehen für Zahlen, manche nicht.
Problem (neu formuliert): Geben Sie einen numerischen Wert, der durch einen Schlüssel repräsentiert wird, aus, wenn der Schlüssel eine Zahl darstellt.
Um das Problem zu lösen, muss man wissen, welche Tasten (aus der Menge aller Tasten) Zahlen darstellen und welchen genauen numerischen Wert jede (Zahlen-)Taste repräsentiert.
Meines Wissens gibt es keine einfache Möglichkeit, eine solche Abbildung aus dem Framework zu erhalten.
Hinweis: Die Tatsache, dass D0-D9 und NumPad0-NamPad9 in der Schlüsselaufzählung aufeinander folgen, ist zufällig, und es ist unbegründet, sich darauf zu verlassen, dass diese Werte in einer bestimmten Reihenfolge angeordnet sind.
Die Lösung wäre also:
- Feststellen, ob ein bestimmter Schlüssel eine Zahl darstellt.
- Gibt den numerischen Wert des Schlüssels zurück, wenn der Schlüssel eine Zahl darstellt.
private static readonly IDictionary<Keys, int> NumericKeys =
new Dictionary<Keys, int> {
{ Keys.D0, 0 },
{ Keys.D1, 1 },
{ Keys.D2, 2 },
{ Keys.D3, 3 },
{ Keys.D4, 4 },
{ Keys.D5, 5 },
{ Keys.D6, 6 },
{ Keys.D7, 7 },
{ Keys.D8, 8 },
{ Keys.D9, 9 },
{ Keys.NumPad0, 0 },
{ Keys.NumPad1, 1 },
{ Keys.NumPad2, 2 },
{ Keys.NumPad3, 3 },
{ Keys.NumPad4, 4 },
{ Keys.NumPad5, 5 },
{ Keys.NumPad6, 6 },
{ Keys.NumPad7, 7 },
{ Keys.NumPad8, 8 },
{ Keys.NumPad9, 9 }
};
private int? GetKeyNumericValue(KeyEventArgs e) {
if (NumericKeys.ContainsKey(e.KeyCode)) return NumericKeys[e.KeyCode];
else return null;
}
Das ist zwar nicht die einfachste Lösung, aber diejenige, die der Lösung am nächsten kommt.