我正在创建一个C#Windows注册表单,这意味着用户必须输入他的用户名,密码和其他详细信息才能注册帐户。
所以我使用“Validating”事件,每个文本框有两个“ErrorProviders”来验证文本框(一个用于错误,一个用于ok),以确保用户名长度至少为5个字符,密码至少包含1个大写字母,1个小写字母等,电子邮件格式正确...你明白了。
以下是我的用户名文本框的验证代码之一:
private void usrTxtBox_Validating(object sender, CancelEventArgs e)
{
if (string.IsNullOrEmpty(usrTxtBox.Text))
{
usrOk.Clear();
usrError.SetError(usrTxtBox, "field required!");
count++;
}
else if (!Regex.IsMatch(usrTxtBox.Text, "</REGEX PATTERN/>"))
{
usrOk.Clear();
usrError.SetError(usrTxtBox, "</ERROR MESSAGE/>");
count++;
}
else
{
usrError.Clear();
usrOk.SetError(usrTxtBox, "good to go");
count = 0;
}
}
每个文本框都会重复(我有用户名,密码,姓名,电子邮件和联系电话,每个都有不同的正则表达式。
大家都知道,“验证”事件只会在文本框被“聚焦”然后“失去焦点”时才会生效。因此,当我通过正确输入第一个文本框所需的值来单击“注册”时,count将等于0,因此不会出现错误。注册代码按钮点击下方:
private void rgstr_Click(object sender, EventArgs e)
{
if (ValidateChildren())
{
if (count != 0)
{
MessageBox.Show("check again");
}
else if (count == 0)
{
MessageBox.Show("gd to go");
}
}
}
我尝试使用ValidateChildren强制验证,但它不起作用。这有什么解决方案吗?或者是否有另一种验证我的文本框的解决方案?
答案 0 :(得分:1)
尝试此模式进行验证
private bool ValidateChildren()
{
bool IsValid = true;
// Clear error provider only once.
usrError.Clear();
//use if condition for every condtion, dont use else-if
if (string.IsNullOrEmpty(usrTxtBox.Text.Trim()))
{
usrError.SetError(usrTxtBox, "field required!");
IsValid =false;
}
if (!Regex.IsMatch(usrTxtBox.Text, "</REGEX PATTERN/>"))
{
usrError.SetError(usrTxtBox, "</ERROR MESSAGE/>");
IsValid =false;
}
return IsValid ;
}
并按下按钮点击:
private void rgstr_Click(object sender, EventArgs e)
{
if (ValidateChildren())
{
// valid
}
else
{
//Error will shown respective control with error provider
}
}