Какие есть другие альтернативы использованию e.Cancel = true в событии Validating? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть форма для входа в систему, в которой я проверяю несколько текстовых полей.

Вот код подтверждения для Textbox:

private void Required_Validated(object sender, EventArgs e)
{
    // clear errors set by provider
    this.errorProvider1.SetError((Control)sender, null);
}

private void Required_Validating(object sender, CancelEventArgs e)
{
    var control = (Control)sender;
    if (!string.IsNullOrEmpty(control.Text))
    {
        // required field is filled up
        return;
    }

    e.Cancel = true;
    // show to user an error message
    this.errorProvider1.SetError(control, Resources.RequiredFieldPopup);
}

Исходя из требований конечного пользователя, им не нравится поведение, создаваемое e.Cancel = true в событии TextBox.Validating - установка его в значение true заставляет пользователя вводить действительный ввод, и вы можете ' Перейдите к любому другому элементу управления, пока вы не исправите свой ввод .

Что было бы идеальной альтернативой / пересмотром проекта для этого общего проекта проверки, в котором события Validated и Validating оба используются в качестве предполагаемого проекта?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Я случайно нашел решение, идеальное для конечных пользователей.Это свойство Form.AutoValidate, установленное на EnableAllowFocusChange.Я также думаю, что this должно быть значением по умолчанию для этого свойства.Я занимался разработкой с использованием WinForms уже много лет, и я узнал об этом только сейчас (думаю, я не достаточно Googling).

Более подробное объяснение различий в поведении см. В это .

0 голосов
/ 11 апреля 2019

Прежде чем отправлять поля формы в базу данных или Active Directory для аутентификации с помощью нажатия кнопки, почему бы не проверить эти поля, например:

private void button1_Click(object sender, EventArgs e) { 
  bool isValid = true;
  foreach( var control in this.Controls)
   {
      if (string.IsNullOrEmpty(control.Text)) 
      { 
          isValid = false;
          this.errorProvider1.SetError(control, Resources.RequiredFieldPopup);
      }
   }
   if (!isValid) return;
  }

Другой способ - использовать событие LostFocus TextBox.

PS: набрано на моем телефоне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...