Почему цифровые цифры и обычные цифры не совпадают в KeyEvent?
Этот код не позволяет мне вводить числовые значения с цифровой клавиатуры.
private void textBox1_KeyDown( object sender, KeyEventArgs e ) {
e.SuppressKeyPress = !( (e.KeyValue >= 48 && e.KeyValue <= 57) )
}
Как я могу включить числовые значения в целом (как от обычных, так и от цифровых клавиш)?
3 ответа
Потому что, в конце концов, это разные ключи, хотя символ, который они представляют, одинаков.
Чтобы получить лучший результат, вы можете использовать Keys
enum и KeyCode
имущество:
e.SuppressKeyPress = !((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))
Или использовать KeyPress
событие, потому что там вы будете иметь коды символов в аргументах события.
Внутри обработчика событий KeyPress вы можете сделать:
e.Handled = !Char.IsDigit(e.KeyChar)
Они не одинаковы, потому что они не тот же ключ. Значение ключа - это абстракция конкретной клавиши, которую вы нажали на клавиатуре, а не значения, которое представляет клавиша.
Тем не менее, вы можете просто проверить, нажата ли клавиша numpad или другая с помощью простого ИЛИ.
Одним из решений является использование KeyPress
событие и TryParse
метод как это:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
int n;
e.Handled = !int.TryParse(e.KeyChar.ToString(), out n);
}
Или вы можете проверить NumPads
как это:
e.SuppressKeyPress = !((e.KeyValue >= 48 && e.KeyValue <= 57 || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)));