Я пытаюсь использовать этот настраиваемый метод для проверки ввода пользователя в текстовых полях. Но я вижу, что здесь что-то отсутствует, так как теперь я не могу перемещаться (фокусироваться) на следующее текстовое поле в форме!
private void textBox_Validating(object sender, CancelEventArgs e)
{
TextBox currenttb = (TextBox)sender;
if (currenttb.Text == "")
{
MessageBox.Show(string.Format("Empty field {0 }", currenttb.Name.Substring(3)));
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
Добавление обработчика в текстовые поля с циклом foreach в конструкторе формы:
foreach(TextBox tb in this.Controls.OfType<TextBox>().Where(x => x.CausesValidation == true))
{
tb.Validating += textBox_Validating;
}
Как ответ здесь, его ожидаемое поведение потери фокуса С# Проверка ввода для текстового поля на winforms: -
Описание
Существует много способов проверки вашего TextBox. Вы можете сделать это при каждом нажатии клавиши, в более позднее время или в Верификационном событии.
Проверяющее событие запускается, если ваш TextBox теряет фокус, например, нажмите на другой элемент управления. Если ваш набор e.Cancel = true, TextBox не потеряет фокус.
MSDN - Control.Validating Event Когда вы меняете фокус с помощью клавиатуры (TAB, SHIFT + TAB и т.д.), Вызывая методы Select или SelectNextControl или устанавливая свойство ContainerControl.ActiveControl в текущую форму, события фокуса происходят в следующем порядке
Войти
GotFocus
Оставлять
Пользователи
Утвержденный
LostFocus
Когда вы меняете фокус с помощью мыши или вызывая метод Фокус, события фокуса происходят в следующем порядке:
Войти
GotFocus
LostFocus
Оставлять
Пользователи
Утвержденный
if
. Должно быть так> if (currenttb.Text == "") {MessageBox.Show (string.Format ("Пустое поле {0}", currenttb.Name.Substring (3))); e.Cancel = true; }