我现在正在写一份报名表。当我单击按钮时,我希望表单检查几个因素,以便继续并将数据保存到数据库。如果有错误,我有三个标签会显示错误。因此,当单击按钮时,我希望它检查并确保文本框不为空,然后如果它们为空,则将该文本发布到三个标签之一。然后,如果密码字段不匹配或为空,请将其添加到另一个标签。我还想检查以确保密码符合长度要求
我遇到的问题是,一旦if语句完成,它基本上就会停止。所以我添加了一个else if语句,但这并没有真正帮助。有什么我想念的吗?
private void btnCreate_Click(object sender, EventArgs e)
{
checkBoxes();
string err();
if (emptyBoxes.Count != 0)
{
err = string.Join(", ", emptyBoxes) + " cannot be empty";
lblError.Text = err;
}
else if (!txtPassword.Text.Equals(txtPwdConf.Text))
{
lblError2.Text = "Passwords do not match!";
}
else if (!string.IsNullOrEmpty(txtPassword.Text))
{
String password = txtPassword.Text;
Match pw = Regex.Match(password, @"((?=.*\d)(?=.*[A - Z])(?=.*\W).{ 8,50})", RegexOptions.IgnorePatternWhitespace);
if (!pw.Success)
{
lblError3.Text = "Passowrd is not valid.";
}
}
答案 0 :(得分:0)
仅使用if
代替if else
:
if (emptyBoxes.Count != 0)
{
err = string.Join(", ", emptyBoxes) + " cannot be empty";
lblError.Text = err;
}
if (!txtPassword.Text.Equals(txtPwdConf.Text))
{
lblError2.Text = "Passwords do not match!";
}
if (!string.IsNullOrEmpty(txtPassword.Text))
{
String password = txtPassword.Text;
Match pw = Regex.Match(password, @"((?=.*\d)(?=.*[A - Z])(?=.*\W).{ 8,50})", RegexOptions.IgnorePatternWhitespace);
if (!pw.Success)
{
lblError3.Text = "Passowrd is not valid.";
}
}
答案 1 :(得分:0)
您的代码基本上说:
A
B
C
你看到了问题吗?
你的if语句都是互斥的。意味着如果一个被触发,则其他都不能被触发。这是因为您使用else if
语句而不是if
。
如果您将代码更改为仅使用if
语句,您会发现一个很大的区别:
if (emptyBoxes.Count != 0)
{
err = string.Join(", ", emptyBoxes) + " cannot be empty";
lblError.Text = err;
}
if (!txtPassword.Text.Equals(txtPwdConf.Text))
{
lblError2.Text = "Passwords do not match!";
}
if (!string.IsNullOrEmpty(txtPassword.Text))
{
String password = txtPassword.Text;
Match pw = Regex.Match(password, @"((?=.*\d)(?=.*[A - Z])(?=.*\W).{ 8,50})", RegexOptions.IgnorePatternWhitespace);
if (!pw.Success)
{
lblError3.Text = "Passowrd is not valid.";
}
}
这段代码就像是说:
A
B