Я предлагаю использовать TextChanged
вместо KeyPress
событие: независимо от того, изменилось TxtUserID.Text
(например, Вставить , или, представьте, пользователь положил "12340"
, а затем удалено "1234"
для получения "0"
) проверить TxtUserID
private static bool IsNameValid(string name) {
if (string.IsNullOrEmpty(name))
return true;
else if (name.Any(c => c < '0' || c > '9')) {
MessageBox.Show("Your User ID must contain digits only!");
return false;
}
else if (name.StartsWith("0")) {
MessageBox.Show("Your User ID must not start from 0!");
return false;
}
return true;
}
private void TxtUserID_TextChanged(object sender, EventArgs e) {
if (!IsNameValid(TxtUserID.Text))
txtUserID.Clear(); // Taken from the question
}
Редактировать: Как Томас Вос указал, очистка весь текст может быть жестоким для пользователя (представьте, что он напечатал "1001234566978563"
, а затем решил удалить начальный "100"
), вероятно
txtUserID.Text = string.Concat(txtUserID
.Text
.Where(c => c >= '0' && c <= '9') // Digits only
.SkipWhile(c => c == '0')); // Trim all starting '0'
вместо txtUserID.Clear();
когда мы удаляем все символы, кроме цифр и обреза, ведем 0
- лучший выбор.