输入第一个字符时,C# - 确认,密码和电子邮件文本框显示消息框

时间:2015-10-08 09:48:12

标签: c# winforms

enter image description here

 //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个字符”。和电子邮件文本框一样,我想应用正则表达式但不能正常工作。我在电子邮件部分移动了我的代码,但它显示了“电子邮件无效”正则表达式消息框。现在,告诉我当输入不匹配的单词而不是输入第一个字符时,我能做什么得到消息框。

5 个答案:

答案 0 :(得分:2)

因为您使用的是TextChanged事件,所以每次更改Text时都会提升。您应该点击按钮Register进行检查。

不仅仅是这一个,你应该在点击按钮上检查你的所有验证。

在用户的帮助下,您可以使用Label在用户输入内容时显示消息,而不是显示MessageBox。这对用户来说将是一次顺畅的体验。

答案 1 :(得分:2)

问题是您将验证码放在txtRegPassConfirm_TextChanged_1函数中。正如函数的名称所说,只要txtRegPassConfirm文本框中的文本发生更改,就会触发该函数。这就是你第一次打字时得到MessageBox的原因。

要解决您的问题,请将验证码放在每个文本框的Click event Register button而不是TextChanged事件中。

另一个更好的解决方案是:使用Error Provider Control来显示您的错误,而不是使用MessageBox。要了解更多信息,请查看MSDN

答案 2 :(得分: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
}

由于

答案 3 :(得分:2)

通过按Tab键或鼠标单击,移动到下一个文本框(验证以前的文本框输入)时也可以进行验证。这可以在文本框事件Leave或Enter中完成。

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");
    }
}

答案 4 :(得分:2)

主要问题:

您正在文本框的TextChanged事件中检查验证规则。此处列出了一些可能有助于您执行验证的选项:

选项1:点击按钮事件

进行验证

您可以在注册按钮的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:使用验证事件和ErrorProvider

作为更好的解决方案,您可以使用ErrorProvider。在表单中放置一个错误提供程序并处理TextBoxes的Validatin事件并为该控件设置错误。

然后在注册按钮的Click事件中,您可以检查是否有任何验证错误。

这里有截图:

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);
    }
}