C# 是否使用winform的控制框[X]跳过验证?

C# 是否使用winform的控制框[X]跳过验证?,c#,winforms,validation,events,controlbox,C#,Winforms,Validation,Events,Controlbox,我有一个确认事件 private void EmployeeIDtextBox_Validating(object sender, CancelEventArgs e) { if (EmployeeIDtextBox.Text == "") { MessageBox.Show("Please Enter EmployeeID.", "Invalid EmployeeID"); } } 并且可以通过取消按钮跳过验证 private void cancelbutton

我有一个确认事件

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();
}
是否可以使用windowsform的controlbox[X]跳过验证?我试图将表单的CausesValidation设置为false,但它不起作用。我也尝试使用formclosing,但它不起作用

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

我已经在你之前的问题中给了你答案。停止使用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);
    }

在FormClosing中使用与在cancelbutton_Click中相同的代码。我已经尝试过了,但不起作用:(