Проверить и обновить значение у NumericUpDown после каждого введенного с клавиатуры символа

Пользователь вводит число в NumericUpDown с клавиатуры, но проверка этого числа на соответствие нижней и верхней границам происходит только после смены фокуса с numeric'а. Как я могу совершать эту встроенную проверку после каждого введенного символа?

Я хотел бы написать что-то вроде:

private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
        {
                ((NumericUpDown)sender).ValidateEditText();
        }

Но метод ValidateEditText() защищенный, а не публичный.


Ответы (1 шт):

Автор решения: Alexander Petrov

У NumericUpDown есть метод Validate, его и надо вызывать.

Так как пользователь может изменять значения не только с клавиатуры, но и с помощью мышки, то лучше обрабатывать событие TextChanged. Кстати, в дизайнере оно скрыто у этого контрола. Поэтому сделаем это вручную, например, в событии Load формы.

numericUpDown1.TextChanged += NumericUpDown1_TextChanged;

Код в обработчике события:

private void NumericUpDown1_TextChanged(object sender, EventArgs e)
{
    if (numericUpDown1.Value < numericUpDown1.Minimum ||
        numericUpDown1.Value > numericUpDown1.Maximum)
        numericUpDown1.Validate();
}
→ Ссылка