3

我已经在取消按钮上将 Causesvalidation 设置为 false 并且它可以正常工作。

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

private void button3_Click(object sender, EventArgs e)
{
    IsCancelBtnClicked = true;
    EmployeeIDtextBox.Validating -= new CancelEventHandler(textBox4_Validating);
    this.Close();
}

或者

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

我需要的是在 Windowsform 的 Close[X]box 中将 CauseValidation 设置为 false?。我已经尝试在表单本身中将 CauseValidation 设置为 false,但它不起作用。每次我点击 Close[X]box 时,消息框仍然出现。

4

2 回答 2

4

Form 类在关闭表单之前自动运行 ValidateChildren。如果您有任何控件在其验证事件处理程序中设置了 e.Cancel = true,那么这会阻止关闭按钮工作。您所要做的就是允许表单关闭。将此代码粘贴到表单的源代码中:

    protected override void OnFormClosing(FormClosingEventArgs e) {
        e.Cancel = false;
        base.OnFormClosing(e);
    }

如果您抱怨 MessageBox.Show() 而不是 ErrorProvider并且您使用 Show() 而不是 ShowDialog() 显示窗口,那么您需要一个更大的武器。这需要在 Winforms 运行 ValidateChildren() 方法并触发您的消息框之前尽早禁用验证。将此代码粘贴到表单类中:

    protected override void WndProc(ref Message m) {
        const int WM_CLOSE = 0x10;
        if (m.Msg == WM_CLOSE) {
           base.AutoValidate = System.Windows.Forms.AutoValidate.Disable;
        }
        base.WndProc(ref m);
    }
于 2013-05-13T14:05:58.120 回答
0

检查表单是否已处理。

if (this.IsDisposed)
{
    if (EmployeeIDtextBox.Text == "")
    {
        MessageBox.Show("Please Enter EmployeeID.", "Invalid EmployeeID");
    }
}
于 2013-05-13T13:11:06.970 回答