2012-01-05 34 views
8

Tôi có khoảng 20 trường văn bản trên biểu mẫu mà người dùng có thể điền vào. Tôi muốn nhắc người dùng xem xét lưu nếu họ có bất kỳ thứ gì được nhập vào bất kỳ hộp văn bản nào. Ngay bây giờ các kiểm tra cho rằng thực sự dài và lộn xộn:Làm cách nào tôi có thể kiểm tra nhiều hộp văn bản nếu rỗng hoặc trống mà không có kiểm tra duy nhất cho mỗi hộp?

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

Có cách nào tôi có thể sử dụng một cái gì đó giống như một mảng của bất kỳ, nơi mảng được làm bằng các hộp văn bản và tôi kiểm tra xem nó như vậy? Những cách khác có thể là một cách rất thuận tiện để xem liệu có bất kỳ thay đổi nào đã được thực hiện kể từ khi chương trình bắt đầu không?

Một điều khác tôi nên đề cập là có bộ chọn ngày giờ. Tôi không biết nếu tôi cần phải kiểm tra xung quanh đó như là datetimepicker sẽ không bao giờ là null hoặc rỗng.

EDIT: Tôi kết hợp các câu trả lời vào chương trình của mình, nhưng dường như tôi không thể làm cho nó hoạt động chính xác. Tôi thiết lập các thử nghiệm như dưới đây và tiếp tục kích hoạt cuộc gọi 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(); 
     } 

Tại sao không tìm thấy bất kỳ văn bản nào trong hộp văn bản của tôi dựa trên mã ở trên?

Trả lời

22

chắc - liệt kê thông qua điều khiển bạn đang tìm kiếm hộp văn bản:

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

Xây dựng về câu trả lời của George, nhưng cách sử dụng một số phương pháp LINQ ích:

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

Side lưu ý: Một dùng ngoài trời tiêu chuẩn Điều khiển TextBox của hộp sẽ không bao giờ trả về giá trị null trong thuộc tính văn bản của nó. Nice sử dụng LINQ mặc dù! +1 –

+1

Câu trả lời của bạn tốt hơn vì nó sẽ chỉ ném hộp tin nhắn một lần. Tuyên bố 'Foreach' sẽ ném MessgeBox.Show ("Vui lòng nhập tất cả thông tin") nhiều lần. –

Các vấn đề liên quan