2014-09-12 13 views
5

Tôi có chương trình cửa sổ ngắn mà tôi sử dụng để thêm thông tin nhanh chóng. Nhưng bây giờ tôi đang cố gắng để tăng cường nó. Đã tìm kiếm một cách hiệu quả hơn muốn kiểm tra các hộp văn bản trống và nếu ô trống để tìm hộp nào và đặt tiêu điểm trở lại chỉ hộp đó. Hiện tại tôi lặp qua tất cả chúng và kiểm tra xem có bất kỳ ô nào trống không nếu nó chỉ hiển thị một thông báo. Nhưng phải nhìn xem hộp nào bị thiếu văn bản. Heres mã:Tìm hộp văn bản nào trống

bool txtCompleted = true; 
string errorMessage = "One or more items were missing from the form"; 
foreach(Control c in Controls) 
{ 
    if (c is TextBox) 
    { 
     if (String.IsNullOrEmpty(c.Text)) 
     { 
      txtCompleted = false;       
     } 
    } 
} 
if (txtCompleted == false) 
{ 
    MessageBox.Show(errorMessage); 
} 
+0

nếu bạn muốn kiểm tra một TextBox ví dụ bạn cũng có thể sử dụng 'sender' thuộc tính như thế này' ((System.Web.UI.WebControls.TextBox) người gửi) .Items.Clear(); ' – MethodMan

Trả lời

2

Đặt trọng tâm vào điều khiển trong khi trong vòng lặp của bạn, sau đó ngắt khi hoàn tất.

foreach(Control c in Controls) 
    { 
     if (c is TextBox) 
     { 
      if (String.IsNullOrEmpty(c.Text)) 
      { 
       txtCompleted = false; 
       c.Focus(); 
       MessageBox.Show(errorMessage); 
       break; 
      } 
     } 
    } 
+1

Tôi nghĩ rằng câu hỏi là về 'Tập trung' quá, nhưng OP chỉ muốn ** nâng cao ** mã hiện tại của mình. –

+1

Điều này, anh ta không lặp qua mọi điều khiển trừ khi không có hộp văn bản trống. Ngay sau khi một nếu thấy nó dừng lại. Trong mã của mình, anh ta loops tất cả bất kể. Linq phải lặp qua tất cả các điều khiển để trả về những cái mà anh ta muốn để điều này hiệu quả hơn khi xử lý. LINQ hiệu quả hơn trong các dòng mã. –

+0

@CyberneticTwerkGuruOrc tiêu đề cũng nêu rõ rằng OP muốn tìm hộp văn bản trống. Dựa trên đó, nó không chỉ là tăng cường (vì mã hiện tại của ông không phải là "tìm kiếm" bất cứ điều gì) – Default

6

Cách tiếp cận của bạn sử dụng foreach có vẻ đầy hứa hẹn cho tôi. Bạn có thể sử dụng LINQ cũng như

if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text)) { 
    ... 
} 

Bạn có thể sử dụng phương pháp focus() để đặt tiêu điểm vào hộp văn bản trống.

+1

Khi bạn làm chủ LINQ, bạn sở hữu C#. Giải pháp tốt! –

1

Để có được một tài liệu tham khảo để trống hộp văn bản bạn sử dụng hầu hết các giải pháp tương tự như R.T. quà, nhưng sử dụng FirstOrDefault thay vì:

var emptyTextBox = Controls.OfType<TextBox>().FirstOrDefault(t => string.IsNullOrEmpty(t.Text) 
if (emptyTextBox != null) 
{ 
    // there is a textbox that has no Text set 
    // set focus, present error message etc. on emptyTextBox 
} 
Các vấn đề liên quan