Пропустить проверку с помощью controlbox[X] winform?

У меня есть проверяющее событие

private void EmployeeIDtextBox_Validating(object sender, CancelEventArgs e)
{
   if (EmployeeIDtextBox.Text == "")
   {
      MessageBox.Show("Please Enter EmployeeID.", "Invalid EmployeeID");
   }
}

И может пропустить проверку с помощью кнопки отмены

private void cancelbutton_Click(object sender, EventArgs e)
{
    AutoValidate = AutoValidate.Disable;
    Close();
}

Можно ли пропустить проверку с помощью controlbox[X] windowsform? Я попытался установить значение "Причины" в форме "false", но оно не работает. Я также пробую это с Formclosing, но это не работает.

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   if (EmployeeIDtextBox.CausesValidation)
   {
      EmployeeIDtextBox.CausesValidation = false;
      Close();
   }
}

1 ответ

Решение

Я уже дал вам ответ на ваш предыдущий вопрос. Прекратите использовать MessageBox, и ваша проблема исчезнет. Вместо этого используйте компонент ErrorProvider.

Перехватывает обработку закрытия формы, чтобы вы могли отменить проверку до того, как первое событие сработало, требует взлома. Вставьте этот код в вашу форму:

    protected override void WndProc(ref Message m) {
        // Intercept WM_SYSCOMMAND, SC_CLOSE
        if (m.Msg == 0x112 && (m.WParam.ToInt32() & 0xfff0) == 0xf060) this.AutoValidate = AutoValidate.Disable;
        base.WndProc(ref m);
    }
Другие вопросы по тегам