Рейтинг:
7
OriginalGriff
Во - первых, это неприятный бит пользовательского интерфейса-очищать все, потому что он сделал незначительную ошибку, довольно неприятно, а во-вторых, потому что он не будет работать так, как есть.
Если я наберу "A123345!"£$%^&*(" is примет его, потому что он начинается с допустимого символа.
Вы можете исправить его так, чтобы он работал и очень легко принимал только буквы и пробелы:
if (!System.Text.RegularExpressions.Regex.IsMatch(textBox_Ansprechpartner_Name.Text, "^[a-zA-Z ]*$"))
Но я бы посмотрел на сохранение предыдущей версии:
private string lastEntry = "";
private void textBox_Ansprechpartner_Name_TextChanged(object sender, EventArgs e)
{
if (!System.Text.RegularExpressions.Regex.IsMatch(textBox_Ansprechpartner_Name.Text, "^[a-zA-Z ]*$"))
{
int loc = textBox_Ansprechpartner_Name.SelectionStart;
MessageBox.Show("This textbox may only contain letters.");
textBox_Ansprechpartner_Name.Text = lastEntry;
textBox_Ansprechpartner_Name.SelectionStart = loc;
}
lastEntry = textBox_Ansprechpartner_Name.Text;
}
Member 13777741
Большое вам спасибо за Ваш вклад!
Действительно, имеет смысл не удалять все, когда кто-то проскальзывает, хотя то, что вы предложили, имеет ту же проблему, если я начну с буквы, я могу ввести все, что хочу после этого. Как мне это обойти?
OriginalGriff
Проверьте регулярное выражение и сравните его с тем, что есть в моем коде...
Member 13777741
Я как изменил свой, так и нагло скопировал ваш-чтобы посмотреть, не ошибся ли я - и результат одинаков для обоих-
OriginalGriff
Это странно - когда я тестирую его, я набираю "abc1" и получаю MessageBox на " 1 " и нигде больше.
Проверьте, что он компилируется чисто - выполните полную перестройку и проверьте панель "список ошибок", чтобы убедиться в отсутствии ошибок, а затем используйте отладчик, чтобы проверить, что он выполняет правильный код.
Member 13777741
Неважно, я просто очень, очень глупа. Ваш код работает просто отлично, извините меня.
OriginalGriff
У всех нас бывают такие дни! :смеяться:
Рейтинг:
2
User 7429338
1. MessageBox отображается дважды, потому что TextChanged запускается при назначении строки.Пустой. Вы можете временно отменить назначение обработчика TextChanged перед очисткой, а затем восстановить его.
2. в вашем примере вы можете нажать клавишу backspace, которая удалит текст слева от курсора, а затем снова вызовет TextChanged. Если он не пуст, он должен был быть действителен раньше, и, удалив символ, он все еще должен быть.
Может быть, вы могли бы прояснить эту проблему?