Можно использовать событие Validate текстового поля, чтобы установить делегат проверки, который гарантирует, что в окне есть допустимый текст:
textbox1.Validate += delegate(sender, eventArguments)
{
double val;
if (!int.TryParse(textbox1.Text, out val)
{
eventArguments.Cancel = true;
}
}
Однако событие Validate не вызывается до тех пор, пока рассматриваемый элемент управления не потеряет фокус, что может не обеспечить требуемый пользовательский опыт, т. Е. Пользователь сможет ввести недопустимое значение, и не будет, пока они не попытаются оставить контроль, что текст будет проверен. Если вы действительно хотите предотвратить ввод недопустимых символов или значений, вам может потребоваться перехватить событие TextChanged и проверять текст на каждом шаге.
Если вы решите реагировать на TextChanged, учтите, что промежуточные значения могут не анализироваться с требуемым типом - например, если текстовое поле ограничено датой, а пользователь пытается ввести '26 / 11/2009 ', то после первого символа, который не является действительной датой, будет текст "2".