//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个字符”。和电子邮件文本框一样,我想应用正则表达式但不能正常工作。我在电子邮件部分移动了我的代码,但它显示了“电子邮件无效”正则表达式消息框。现在,告诉我当输入不匹配的单词而不是输入第一个字符时,我能做什么得到消息框。
答案 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事件中,您可以检查是否有任何验证错误。
这里有截图:
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);
}
}