Почему цифровые цифры и обычные цифры не совпадают в 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)));
Другие вопросы по тегам