2015-10-08 4 views
1

enter image description hereC# - Подтвердите, пароль и текстовое поле Email показывает мне окно сообщения, когда я ввожу первый символ

//code for confirm password text box: 

    private void txtRegPassConfirm_TextChanged_1(object sender, EventArgs e) 
      { 
        if (txtRegPassConfirm.Text != txtRegPass.Text) 
        { 
         MessageBox.Show("Passwords do not match"); 
         txtRegPassConfirm.Clear(); 
        } 

        else 
        { 
         MessageBox.Show("textbox can not be empty"); 
        } 
       } 


    //code for text box Password: 

    private void txtRegPass_TextChanged(object sender, EventArgs e) 
      { 

       if (txtRegPass.Text.Length < 8) 
       { 

        MessageBox.Show("Password must be at least 8 characters long"); 
        txtRegPassConfirm.Clear(); 
       } 


    // code for text box Email: 

    private void txtRegEmail_TextChanged_1(object sender, EventArgs e) 
     { 


      string c = ConfigurationManager.ConnectionStrings["Constr"].ConnectionString; 
      SqlConnection con = new SqlConnection(c); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand("EmailReg", con); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@Email", this.txtRegEmail.Text); 
      SqlDataReader dr = cmd.ExecuteReader(); 
      while (dr.Read()) 
      { 
       if (dr.HasRows == true) 
       { 
        MessageBox.Show("Email = " + dr[4].ToString() + "is Already exist"); 
        txtRegEmail.Clear(); 
        break; 
       } 
       Regex r = new Regex("^[a-zA-Z0-9){1,20}@[a-zA-Z0-9){1,20}.[a-zA-Z]{2,3}$"); 

       if (!r.IsMatch(txtRegEmail.Text)) 
       { 
        txtRegEmail.Clear(); 
        MessageBox.Show("incorrect formate"); 
       } 

      } 

     } 

//code for button Registration: 

private void btnRegistration_Click_1(object sender, EventArgs e) 
     { 

       string c = ConfigurationManager.ConnectionStrings["Constr"].ConnectionString; 
       SqlConnection con = new SqlConnection(c); 
       con.Open(); 
       SqlCommand cmd = new SqlCommand("RegistrationForm", con); 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("@UserName", txtRegUserN.Text); 
       cmd.Parameters.AddWithValue("@Password", txtRegPass.Text); 
       cmd.Parameters.AddWithValue("@Confirm", txtRegPassConfirm.Text); 
       cmd.Parameters.AddWithValue("@Email", txtRegEmail.Text); 
       SqlDataReader dr = cmd.ExecuteReader(); 

       while (dr.Read()) 
       { 
        if (dr.HasRows == true) 
        { 
         MessageBox.Show("Data Inserted Succesfully"); 

        } 
       } 

       if (dr.HasRows == false) 
       { 

        MessageBox.Show("Access Denied, enter the correct fields"); 
       } 

       else 
       { 
        MessageBox.Show("Enter correct info"); 
       } 
     } 

Когда я запустить приложение и ввести пароль в подтверждение текстовое поле, он показывает мне окно сообщения при вводе первого символа «Пароль не совпадает». Также как показано сообщение в текстовом поле Пароль «Пароль должен содержать не менее 8 символов». И так же, как в текстовом поле «Электронная почта», и я хочу применить Regex, но не работает. Я переместил свой код в раздел электронной почты, но он показывает мне сообщение «Недействительное сообщение электронной почты». Теперь скажите мне, что я могу сделать, чтобы ящик сообщений, когда я вводил слова несоответствия, не входя в первый символ.

ответ

2

Главная проблема:

Вы проверяете свои правила проверки в случае TextChanged ваших текстовых полей.Некоторые варианты, которые могут помочь вам выполнить проверку, перечисленные здесь:

Option1: проверки в Click Event Баттона

Вы можете проверить валидации в Click случае вашей кнопки регистра некоторых вещи, как это:

private void registerButton_Click(object sender, EventArgs e) 
{ 
    //Check for password length   
    if (txtRegPass.Text.Length < 8) 
    { 
     MessageBox.Show("Password must be at least 8 characters long"); 
     txtRegPass.Focus(); 
     return; 
    } 

    //Check for other validations 
    //... 
    // don't forget to return; if the state is not valid 


    //If the code execution reaches here, it means all validation have been passed 
    //So you can save data here. 
} 

Вариант 2: Использование Validating событий и ErrorProvider

Как лучшее решение, вы может использовать ErrorProvider. Поместите поставщика ошибок в форму и обработайте событие Validatin вашего TextBoxes и установите ошибку для этого элемента управления.

В случае нажатия на кнопку вашего регистра вы можете проверить, есть ли какая-либо ошибка проверки или нет.

и вот скриншот:

enter image description here

private void ValidationTest_Load(object sender, EventArgs e) 
{ 
    this.AutoValidate = System.Windows.Forms.AutoValidate.EnableAllowFocusChange; 
} 

private void passwordTextBox_Validating(object sender, CancelEventArgs e) 
{ 
    if (this.passwordTextBox.TextLength < 8) 
    { 
     this.errorProvider1.SetError(this.passwordTextBox, "Password must be at least 8 character"); 
     e.Cancel = true; 
    } 
    else 
    { 
     this.errorProvider1.SetError(this.passwordTextBox, ""); 
    } 
} 

private void confirmTextBox_Validating(object sender, CancelEventArgs e) 
{ 
    if (this.confirmTextBox.Text != this.passwordTextBox.Text) 
    { 
     this.errorProvider1.SetError(this.confirmTextBox, "Password and Confirm must be the same"); 
     e.Cancel = true; 
    } 
    else 
    { 
     this.errorProvider1.SetError(this.confirmTextBox, ""); 
    } 
} 

private void registerButton_Click(object sender, EventArgs e) 
{ 
    if (this.ValidateChildren()) 
    { 
     //Do registration here 
    } 
    else 
    { 
     var listOfErrors = this.errorProvider1.ContainerControl.Controls 
          .Cast<Control>() 
          .Select(c => this.errorProvider1.GetError(c)) 
          .Where(s => !string.IsNullOrEmpty(s)) 
          .ToList(); 
     MessageBox.Show("please correct validation errors:\n - " + 
      string.Join("\n - ", listOfErrors.ToArray()), 
      "Error", 
      MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 
+0

Я использовал ваш второй вариант ... когда я вводил пароль, он показывает мне значок ошибки, а когда я вхожу неправильно, когда я нажимаю на другое текстовое поле, он заставляет курсор застревать в этом текстовом поле ... – Warda

+0

@Warda Поместите это в Событие 'Load' формы:' this.AutoValidate = System.Windows.Forms.AutoValidate.EnableAllowFocusChange; 'как я, или задал его во время разработки. –

+0

Я использовал, как и выше, вы написали код. Когда я ввожу пароль, он показывает мне значок ошибки, и когда я вхожу неправильно, когда я нажимаю на другое текстовое поле, он помещает курсор в это текстовое поле. – Warda

2

Потому что вы используете событие TextChanged, и он поднимается каждый раз, когда вы меняете Text. Вы должны проверить это нажатием кнопки Register.

Не только этот, все проверки должны быть проверены при нажатии кнопки.

Для помощи пользователя вы можете использовать Label, чтобы отобразить сообщение, пока пользователь печатает что-то, а показывает MessageBox. Это будет гладкий опыт для пользователя.

+0

Вы можете написать код, как я могу использовать в кнопку регистрации ??? – Warda

+0

Просто положите все свои подтверждения в событии 'Click' кнопки' Register'. – Shaharyar

+0

okay позвольте мне попробовать .... – Warda

2

Проблема заключается в том, что вы вставили свой код проверки в txtRegPassConfirm_TextChanged_1. Как указано в названии функции, эта функция будет срабатывать всякий раз, когда текст в текстовом поле txtRegPassConfirm изменился. Вот почему вы получаете MessageBox при первом вводе.

Чтобы решить вашу проблему, введите код проверки в поле Click event из Register button вместо TextChanged событий каждого текстового поля.

Еще одно лучшее решение: используйте Error Provider Control, чтобы показать свою ошибку вместо MessageBox. Чтобы узнать больше об этом, взгляните на MSDN.

+0

спасибо тонну !!! Можете ли вы написать код, как я могу использовать кнопку регистрации? – Warda

+0

Дважды нажмите кнопку «Зарегистрироваться», Visual Studio автоматически сгенерирует функцию, которая будет вызываться, когда пользователи нажимают эту кнопку. Поместите там свой код. – AnhTriet

+0

Да! Я знаю это @Anhtriet ... но я уже использую использованный запрос insert для сохранения ... – Warda

2

Вот ваше решение

private void btnRegistration_Click_1(object sender, EventArgs e) 
{ 
       if (txtRegPassConfirm.Text != txtRegPass.Text) 
       { 
        MessageBox.Show("Passwords do not match"); 
        txtRegPassConfirm.Clear(); 
        return; 
       } 

       else 
       { 
        if (txtRegPass.Text.Length < 8) 
        { 

         MessageBox.Show("Password must be at least 8 characters long"); 
         txtRegPassConfirm.Clear(); 
         return; 
        } 

       } 
     //put your next code as it is which you wrote in this click event 
} 

Благодаря

+0

спасибо ton !!! моя проблема решена ... – Warda

+0

Отметьте или отметьте этот ответ, чтобы другой человек мог узнать об этой проблеме. Я с удовольствием помогу вам –

+0

Пока ваше предложение полностью в порядке, вы можете проверить мое [решение] (http: //stackoverflow.com/a/33014773/3110834). +1 –

2

Проверка также может быть сделана во время перехода к следующему текстовому полю (Validation предыдущего ввода текста) с помощью вкладки нажатия или с помощью мыши. Это можно сделать в событиях текстового поля «Оставить» или «Ввод».

private void textBox1_Leave(object sender, EventArgs e) // This event is triggered while leaving the textbox1 
    { 
     if ("a" != textBox1.Text) 
     { 
      MessageBox.Show("Invalid"); 
     } 
    } 

private void textBox2_Enter(object sender, EventArgs e)// This event is triggered while entering the textbox2 
{ 
    if ("a" != textBox1.Text) //Content of textbox1 is validated 
    { 
     MessageBox.Show("Invalid"); 
    } 
} 
+0

спасибо ton !!! моя проблема была решена ... – Warda

+0

Проверка этого пути неверна, и вместо этого вы должны использовать проверочное событие. –

+0

Hi Reza Aghaei - Соглашайтесь со своей точкой. +1 для вашего образца. Спасибо :) – Vidya

Смежные вопросы