2014-01-15 2 views
1

C# Windows 등록 양식을 만들 때 계정 등록을 위해 사용자 이름, 암호 및 기타 정보를 입력해야합니다.버튼 클릭시 WinForm 유효성 검사가 유효하지 않습니다.

그래서 각 텍스트 상자에 대해 텍스트 상자 (오류 1 개, 확인 1 개)의 유효성을 검사하는 2 개의 "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; 
    } 
} 

내가이 사용자 이름, 비밀번호, 이름, 이메일 및 연락처 번호, 다른 정규식 각 패턴.

모두들 알다시피, "Validating"이벤트는 텍스트 상자가 "Focused"에서 "focus"가 사라질 때만 유효합니다. 따라서 필요한 값을 올바르게 입력하여 "Register"를 클릭하면 첫 번째 텍스트 상자의 경우 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

에 오신 것을 환영합니다! 나는 당신의 제목을 편집했습니다. "질문에"제목에 "꼬리표"를 포함시켜야합니까? ", 여기서 합의는"아니오,하지 말아야합니다 "입니다. 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

안녕하세요, "모든 코드 경로가 값을 반환하지 않는다"는 "개인 bool ValidateChildren()"오류가 있습니다. 또한 "bool IsValue"가 할당되었지만 해당 값이 사용되지 않습니다. – winston

+0

업데이트 된 코드를 확인하고 return 문을 추가했습니다. – Arshad

+0

안녕하세요, 고마워, 내가 코드를 약간 변경 했어. ValidateChildren()의 이름을 WinForm 메서드 (?)로 변경하여 충돌이 발생합니다. 도와 주셔서 감사합니다! 매우 감사. – winston

관련 문제