2014-01-18 4 views
0

내가 텍스트 상자에 오류 공급자를 적용하는 것을 시도하고,오류 공급자

텍스트 박스는 비워 둘 수 없습니다 25 개 이상의 문자 입력 할 수 없습니다 사용자는

private void txtNameandSurn_TextChanged(object sender, EventArgs e) 
{ 
    txtNameandSurn.MaxLength = 25; 

    if (txtNameandSurn.Text == "") 
    { 
     txtNameandSurn.BackColor = Color.White; 
     errorProvider1.SetError(txtNameandSurn, "Cannot be blank!"); 
    } 
    else 
    { 
     txtNameandSurn.BackColor = Color.Red; 
     errorProvider1.SetError(txtNameandSurn, ""); 
    } 

    if (txtNameandSurn.Text.Length >= txtNameandSurn.MaxLength) 
    { 
     errorProvider1.SetError(txtNameandSurn, "Cannot input more than 25 characters!"); 
    } 
    else if (txtNameandSurn.Text.Length < txtNameandSurn.MaxLength) 
    { 
     errorProvider1.SetError(txtNameandSurn, ""); 
    } 
} 

내가 가진 문제는 함께

문자 입력, 오류 공급자가 나타나지만 다른 키를 누르면 errorprovider에 대한 아이콘이 사라지지만 문자가 입력되지 않은 것이 좋습니다. 오류 공급자 아이콘을 계속 표시하려면 어떻게합니까?

+0

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야한다"는 것을 참조하십시오. –

답변

1

논리적 인 방법으로 조건을 다시 작성해야합니다. 올바른 입력이없는 모든 경우에는 정의가 있어야하며 올바른 오류 집합이 있어야합니다. 다른 경우 (입력이 올바른 경우) 오류를 제거하십시오. 간체는 다음과 같아야합니다.

if (String.IsNullOrEmpty(textBox1.Text)) 
{ 
    errorProvider1.SetError(textBox1, "Cannot be blank!"); 
} 
else if(textBox1.Text.Length >= textBox1.MaxLength) 
{ 
    errorProvider1.SetError(textBox1, "Cannot input more than 25 characters!"); 
} 
else 
{ 
    errorProvider1.SetError(textBox1, ""); 
} 

이렇게하면 더 많은 조건을 추가 할 수 있습니다. 당신의 에디터는 단순히 문에 다음을 추가하는 #를 포함하지 않는 예를 들어 원하는 경우 :

if(textBox1.Contains("#")) 
{ 
    errorProvider1.SetError(textBox1, "Cannot contain a '#'!"); 
} 
1

큰 가독성과 새로운 규칙을 추가하기위한 유연성을,이 구문을 선호합니다. 이는 또한 특정 데이터 유형에 대한 재사용 가능한 규칙 세트를 작성하는 데 도움이됩니다. 이 테스트되지 않은 코드는 errorProvider를 이해했다면 문제를 해결해야합니다.

class Rule 
    { 
     public Func<string, bool> Test { get; set; } 
     public string Message { get; set; } 
    } 

    private void txtNameandSurn_TextChanged(object sender, EventArgs e) 
    { 
     var rules = new List<Rule>() 
     { 
      new Rule() { Test = s => !String.IsNullOrEmpty(s), Message="String cannot be blank." }, 
      new Rule() { Test = s => (s.Length <= txtNameandSurn.MaxLength), Message="String cannot be longer than " + txtNameandSurn.MaxLength }, 
      new Rule() { Test = s => !s.Contains("#"), Message = "String cannot contain a hash character." } 
     }; 

     var isValid = rules.All(r => r.Test(txtNameandSurn.Text)); 

     string[] message; 
     if (!isValid) 
     { 
      message = rules.Where(r => r.Test(txtNameandSurn.Text) == false).Select(r => r.Message); 
     } 

     errorProvider1.SetError((message.Length > 0) ? (string.Join(';', message)) : ""); 
    } 
+0

오류 공급자는 # 문자를 포함해서는 안되지만 # @! $ %^& *() 등의 특수 문자를 모두 포함하면 안됩니다. – LukeBorg

+0

물론 ... 쉽게 사용할 수 있어야합니다. 해당 문자를 테스트하는 RegEx. –

+0

나는 이런 일을 한번도 사용하지 않았습니다. 이것은 창문 형태의 첫해입니다. – LukeBorg