Ввод денежной суммы в два поля (Windows Forms)

Иногда в работе приходится сталкиваться с не совсем тривиальной постановкой тривиальных задач. Например, ввести денежную сумму в два поля. То есть, рубли и копейки вводятся в разные поля.

Рассмотрим, как можно решить данную задачу в рамках Windows Forms.

Допустим есть такая форма (см.скриншот), где есть отдельное поле для вода рублей (назовём его rub) и копеек (назовём его kop).

Для начала нам нужно запретить ввод в поле для копеек любых символов, кроме цифр. При этом не должна блокироваться работа клавиши Backspace.

Для этого в обработчик события KeyPress вводится соответствующая проверка.

Метод IsDigit проверяет является ли нажатая клавиша цифровой, а цифра 8 соответствует коду клавиши Backspace. На этом подготовка поля для копеек завершена.

В поле для рублей мы используем аналогичную проверку, которая дополнена переходом к вводу в поле копеек после попытки ввода десятичного разделителя.

Помимо приведённого выше способа, есть возможность получить информацию о десятичном разделителе на основании используемой раскладки клавиатуры. Но, реализация в таком случае будет гораздо более громоздкой и в силу специфики задачи, это скорее всего будет излишним усложнением программы.

Теперь остаётся только в событии TextChanged очистить поле для рублей от введённого символа десятичного разделителя.

Задача решена. Теперь мы можем вводить денежную сумму в два поля переключаясь на поле для копеек по нажатию клавиши, соответствующей десятичному разделителю.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *