2012-01-05 6 views
8

사용자가 작성할 수있는 양식에 약 20 개의 텍스트 필드가 있습니다. 사용자가 텍스트 상자에 입력 한 내용이 있으면 저장할지 묻는 메시지를 표시하려고합니다. 지금 그에 대한 테스트는 정말 길고 지저분한이다 : 나는 배열이 텍스트 상자 구성되어 나는 그런 식으로 확인 어떤의 배열, 같은 것을 사용할 수있는 방법은각각에 대해 고유 한 테스트없이 null 또는 비어있는 경우 여러 텍스트 상자를 검사하려면 어떻게합니까?

if(string.IsNullOrEmpty(txtbxAfterPic.Text) || string.IsNullOrEmpty(txtbxBeforePic.Text) || 
      string.IsNullOrEmpty(splitContainer1.Panel2) ||...//many more tests 

있습니까? 프로그램을 시작한 이후에 변경 사항이 있는지 확인하기위한 다른 방법은 무엇입니까?

내가 언급해야 할 다른 한 가지는 날짜 선택 도구입니다. datetimepicker가 null 또는 비어 있지 않으므로 주위를 테스트해야하는지 잘 모르겠습니다.

편집 : 답변을 프로그램에 포함 시켰지만 제대로 작동하지 않는 것처럼 보입니다. 아래와 같이 테스트를 설정하고 Application.Exit() 호출을 계속 실행합니다.

 //it starts out saying everything is empty 
     bool allfieldsempty = true; 

     foreach(Control c in this.Controls) 
     { 
      //checks if its a textbox, and if it is, is it null or empty 
      if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text))) 
      { 
       //this means soemthing was in a box 
       allfieldsempty = false; 
       break; 
      } 
     } 

     if (allfieldsempty == false) 
     { 
      MessageBox.Show("Consider saving."); 
     } 
     else //this means nothings new in the form so we can close it 
     {     
      Application.Exit(); 
     } 

왜 위의 코드를 기반으로 텍스트 상자에 텍스트가 없습니까?

답변

22

물론 - 텍스트 상자를 찾고 당신의 컨트롤을 통해 열거 :

foreach (Control c in this.Controls) 
{ 
    if (c is TextBox) 
    { 
     TextBox textBox = c as TextBox; 
     if (textBox.Text == string.Empty) 
     { 
      // Text box is empty. 
      // You COULD store information about this textbox is it's tag. 
     } 
    } 
} 
9

조지의 대답에 건물,하지만 몇 가지 편리한 LINQ 방법을 사용하기 :

if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text))) 
{ 
//Your textbox is empty 
} 
+1

사이드 노트 : 표준의 콘센트를 of-the-Box TextBox 컨트롤은 텍스트 속성에 null 값을 반환하지 않습니다. LINQ의 좋은 사용! +1 –

+1

메시지 상자를 한 번만 던지면 대답이 더 좋습니다. 'Foreach'문은 MessgeBox.Show ("모든 정보를 입력하십시오")를 여러 번 throw합니다. –