2016-04-13 11 views
0

Ich habe einen regulären Ausdruck in C# winforms. Ich habe es zu identifizieren, ob das Format korrekt ist oder nicht. Wenn es korrekt ist, wird es mit dem Speichern fortfahren, aber wenn es korrekt ist, wird es seine Validierung anzeigen und das Speicherereignis abbrechen.Regulärer Ausdruck, um das Ereignis abzubrechen, wenn es falsch ist

Validieren Code

private void emailTxt_Validating(object sender, CancelEventArgs e) 
{ 
    string pattern = "^([0-9a-zA-Z]([-\\.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$"; 

    if (Regex.IsMatch(emailTxt.Text, pattern)) 
    { 
     e.Cancel = false; 
    } 
    else 
    { 
     e.Cancel = true; 
     errorEmail.SetError(emailTxt, "Incorrect Format Try... [email protected]"); 
     CancelBtn.Enabled = true;    
    } 
} 

Code speichern

private void SaveBtn_Click(object sender, EventArgs e) 
     { 
      //SQL Connection and SQL for inserting a new admin 
      SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0; AttachDbFilename=C:\Users\Donald\Documents\Visual Studio 2013\Projects\DesktopApplication\DesktopApplication\Student_CB.mdf ;Integrated Security=True"); 
      con.Open(); 

      if (ValidateChildren(ValidationConstraints.Enabled)) 
      { 
       try 
       { 
        string sql = "INSERT INTO Admin (Admin_Username, Admin_FName, Admin_SName, Admin_Email, Admin_Password) " + "VALUES (@adminName, @adminFirstname, @adminSurname, @adminEmail, @adminPassword);"; 

        using (var cmd = new SqlCommand(sql, con)) 
        { 
         cmd.Parameters.AddWithValue("@adminName", usernameTxt.Text); 
         cmd.Parameters.AddWithValue("@adminFirstname", firstnameTxt.Text); 
         cmd.Parameters.AddWithValue("@adminSurname", surnameTxt.Text); 
         cmd.Parameters.AddWithValue("@adminEmail", emailTxt.Text); 
         cmd.Parameters.AddWithValue("@adminPassword", passwordTxt.Text); 
         cmd.ExecuteNonQuery(); 
        } 

        MessageBox.Show("Admin Successfully Added!"); 

        this.Close(); 

       } 

       catch (Exception ex) 
       { 

        MessageBox.Show(ex.Message); 


       } 
      } 

      con.Close(); 
     } 

Es besagt, dass es eine falsche Format, aber es ist weiterhin das Ereignis selbst zu speichern, wenn die Formatierung nicht korrekt ist .

+0

Der Fehler ist woanders und wir können das nicht sehen. Wo ist der Sicherungscode? –

+0

@GiorgiNakeuri Ich habe den obigen Code mit meinem Speichercode aktualisiert. –

+0

Können Sie die 'validateChildren' Methode anzeigen – Valentin

Antwort

0

Ich habe es durch Verschachtelung mit in der Funktion bereits Validierung, ob es leer ist oder nicht. Dies scheint zu funktionieren.

private void emailTxt_Validating(object sender, CancelEventArgs e) 
    { 

    if (string.IsNullOrWhiteSpace(emailTxt.Text)) 
    { 
     e.Cancel = true; 
     errorEmail.SetError(emailTxt, "Email is Empty!"); 
     CancelBtn.Enabled = true; 
    } 
    else 
    { 
     string email = emailTxt.Text; 
     Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); 
     Match match = regex.Match(email); 

     if (match.Success) 
     { 
      e.Cancel = false; 
     } 
     else 
     { 
      e.Cancel = true; 
      errorEmail.SetError(emailTxt, "Incorrect Format Try... [email protected]"); 
      CancelBtn.Enabled = true; 
      return; 
     }         
    } 
}