Попробуйте использовать Regex
. Этот шаблон должен работать: Regex match = new Regex(@"^[1-9]\d*(\.\d{1})?$")
, укажите это в проверяющем событии текстового поля. Если совпадение отсутствует, Undo()
или удалите свойство Textbox.Text.
Regex match = new Regex(@"^[1-9]\d*(\.\d{1})?$");
private void textBox1_Validating(object sender, CancelEventArgs e)
{
if (!match.IsMatch(textBox1.Text))
{
textBox1.Undo();
}
}
Чтобы немедленно отменить ввод, вы должны использовать
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (!match.IsMatch(textBox1.Text))
{
textBox1.Undo();
}
}
Потому что, если вы используете KeyDown, TextBox не имеет состояния отмены.
2nd Edit: Если вы хотите, чтобы оба случая совпадали, вы должны выполнить проверку в Validating Event или аналогичную. Поскольку регулярное выражение использует «$», чтобы убедиться, что в конце не добавляются никакие символы, вы не можете ввести «.» иначе у вас получится число, например 1., что потребует дополнительной проверки.