C# 验证文本框并跳过表单关闭时的验证

C# 验证文本框并跳过表单关闭时的验证,c#,regex,validation,C#,Regex,Validation,下面是我用来验证文本框的代码片段 C代码 private void TxtEmail_Validating(object sender, CancelEventArgs e) { string StrEmail = TxtEmail.Text.Trim(); if (StrEmail == "" || StrEmail.IndexOf("") > 0 || StrEmail.IndexOf('"') > 0 || StrEmail == " " || StrEmai

下面是我用来验证文本框的代码片段

C代码

private void TxtEmail_Validating(object sender, CancelEventArgs e)
{

    string StrEmail = TxtEmail.Text.Trim();
    if (StrEmail == "" || StrEmail.IndexOf("") > 0 || StrEmail.IndexOf('"') > 0 || StrEmail == " " || StrEmail.IndexOf(" ") > 0)
    {
        MessageBox.Show("Email Cannot be Left Blank");
        TxtEmail.Select();

    }

    Regex r = new Regex(@"@.");

    if (r.IsMatch(TxtEmail.Text))
    {
        AutoValidate = AutoValidate.Disable;

    }
    else
    {
        MessageBox.Show("Invalid Email Format");
        TxtEmail.Clear();
        TxtEmail.Focus();
    }

 }

private void TxtPassword_Validated(object sender, EventArgs e)
{

    string StrPass=TxtPassword.Text;
    if (StrPass == "" || StrPass.IndexOf("") > 0 || StrPass.IndexOf('"') > 0 || StrPass == " " || StrPass.IndexOf(" ") > 0)
    {
        MessageBox.Show("Invalid Password");
        TxtPassword.Focus();
    }

    Regex r = new Regex(@"@#");
    if (r.IsMatch(TxtPassword.Text))
    {

        AutoValidate = AutoValidate.Disable;

    }
    else
    {
        MessageBox.Show("Invalid Password");
        TxtPassword.Clear();
        TxtPassword.Focus();

    }


}
如果正则表达式中的参数匹配,我将使用AutoValidate功能取消验证。但问题是,当我使用AutoValidate或将CauseValidation设置为false时,文本框的验证将在首次加载表单时完成。但是,当我删除texbox中的文本并重新输入时,第二次验证不起作用,也不会抛出无效电子邮件消息

在密码验证的情况下。即使按照Regex中的参数输入密码,它也会抛出无效的密码消息。我在这里看到了基于验证的问题,但没有一个问题对我的问题有满意的解决方案


有人能帮我纠正这个错误吗?我希望在没有ErrorProvider的情况下实现验证,这是另一个选项。

尝试验证事件,而不是Validated@Sybren我使用验证来验证电子邮件,但它不起作用。