Datos: teclado tiene teclas. Algunas teclas representan números y otras no.
Problema (reformulado): Rendimiento de un valor numérico representado por una tecla, si la tecla representa un número.
Para resolver el problema, es necesario saber qué teclas (fuera del conjunto de todas las teclas) representan los números así como el valor numérico exacto que representa cada tecla (número).
Que yo sepa, no existe una manera fácil de obtener una asignación de este tipo del marco.
Nota: El hecho de que D0-D9 y NumPad0-NamPad9 sean secuenciales en las claves enum es accidental y confiar en que estos valores se pidan secuencialmente carece de fundamento.
Así solución sería:
- determinar si clave dada representa un número.
- Devuelve el valor numérico de la tecla si la tecla representa un número.
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;
}
Podría decirse que no es la solución más simple, pero el que los modelos de la solución cuidadosamente.
¿por qué no usar las enumeraciones en lugar de los números para que sea más legible? "> = (int) Keys.D0" y "> = (int) Keys.Numpad0" etc ... –
Muchos números mágicos en este código. Usar las enumeraciones de Keys.X es mucho más claro. –
Estaba pensando eso, pero esto es lo que necesitaba. ¡Gracias! –