2014-01-15 109 views
1

我正在创建一个C#Windows注册表单,这意味着用户必须输入他的用户名,密码和其他详细信息才能注册一个帐户。当按钮被点击时,WinForm验证不会被验证

所以我使用两个“ErrorProviders”事件的“验证”事件为每个文本框验证文本框(一个用于错误,一个用于确定),以确保用户名长度至少为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; 
    } 
} 

即重复每一个文本框(我的用户名,密码,姓名,电子邮件地址和联系电话,每一个不同的正则表达式

因此,正如大家可能知道的那样,“验证”事件只在文本框被“聚焦”然后“失去焦点”时才会生效,因此,当我通过正确输入所需的值单击“注册”对于第一个文本框,计数将等于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

欢迎堆栈溢出!我编辑过你的标题。请参阅“应该在标题中是否包含”标签?“,其中的共识是”不,他们不应该“。 http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles –

+0

啊,对不起,我会在将来的问题中留意。谢谢 – winston

+0

http://stackoverflow.com/questions/8915151/c-sharp-validating-input-for-textbox-on-winforms? 您确定取消该活动无效吗? e.Cancel()?它可能会验证正确,但对此没有任何反应。 问题是什么?确认错误的输入或标记一切不正确? – wondra

回答

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

和int按钮点击:

private void rgstr_Click(object sender, EventArgs e) 
    { 
     if (ValidateChildren()) 
     { 
      // valid 
     } 
     else 
     { 
     //Error will shown respective control with error provider 
     } 
    } 
+0

嗨,我从“私人布尔ValidateChildren()”,它说“不是所有的代码路径返回一个值”的错误。同样,“bool IsValue”已分配,但其值始终未使用 – winston

+0

检查更新后的代码,我添加了return语句。 – Arshad

+0

嘿谢谢,它的工作原理,我自己虽然做了一些代码更改。我改变了ValidateChildren()的名字,因为它是一个会冲突的WinForm方法(?)。谢谢您的帮助!非常感激。 – winston