2012-11-22 32 views
7

Tôi đang cố gắng tạo vòng lặp foreach kiểm tra mọi Hộp văn bản trong bảng điều khiển và thay đổi BackColor nếu Văn bản của nó không là gì. Tôi đã thử những điều sau đây:Đối với mỗi vòng lặp hộp văn bản

Dim c As TextBox 
For Each c In Panel1.Controls 
    if c.Text = "" Then 
    c.BackColor = Color.LightYellow 
    End If 
Next 

nhưng tôi nhận được lỗi:

Unable to cast object of type System.Windows.Forms.Label to type System.windows.forms.textbox

+1

Nếu bạn có các điều khiển không phải hộp văn bản trong bảng điều khiển, bạn cần phải cho phép chúng. –

+0

Tôi sẽ làm thế nào? – Lift

+0

có thể trùng lặp của [Không thể truyền đối tượng thuộc loại 'System.Windows.Forms.Button' để nhập> 'System.Windows.Forms.TextBox'] (http://stackoverflow.com/questions/13002128/unable-to- cast-object-of-type-system-windows-forms-button-to-type-system-wi) –

Trả lời

8

bạn có thể thử một cái gì đó giống như thay vì điều này:

Dim ctrl As Control 
    For Each ctrl In Panel1.Controls 
    If (ctrl.GetType() Is GetType(TextBox)) Then 
     Dim txt As TextBox = CType(ctrl, TextBox) 
     txt.BackColor = Color.LightYellow 
    End If 
+0

Làm việc như một sự quyến rũ! Cảm ơn bạn! – Lift

+0

Bạn sẽ muốn đặt lại màu sau khi nhập văn bản, ví dụ này không thực hiện được. –

+1

Trong ví dụ cụ thể này, điều kiện có thể được đơn giản hóa thành 'If (ctrl.GetType() là GetType (TextBox)) Sau đó ctrl.BackColor = Color.LightYellow' ... – menssana

2

Hãy thử điều này. Nó sẽ đưa các màu sắc trở lại khi bạn nhập dữ liệu cũng

For Each c As Control In Panel1.Controls 
     If TypeOf c Is TextBox Then 
      If c.Text = "" Then 
       c.BackColor = Color.LightYellow 
      Else 
       c.BackColor = System.Drawing.SystemColors.Window 
      End If 
     End If 
    Next 

Ngoài ra còn có một cách khác để làm điều này trong đó bao gồm việc tạo ra một điều khiển TextBox kế thừa và sử dụng rằng vào mẫu của bạn:

Public Class TextBoxCompulsory 
    Inherits TextBox 
    Overrides Property BackColor() As Color 
     Get 
      If MyBase.Text = "" Then 
       Return Color.LightYellow 
      Else 
       Return DirectCast(System.Drawing.SystemColors.Window, Color) 
      End If 
     End Get 
     Set(ByVal value As Color) 

     End Set 
    End Property 
End Class 
+0

Vẫn ném cùng ngoại lệ, tuy nhiên, câu trả lời ở trên hoạt động rất giống nhau. Dù sao cũng cảm ơn. – Lift

13

Giả sử không có điều khiển lồng nhau:

For Each c As TextBox In Panel1.Controls.OfType(Of TextBox)() 
    If c.Text = String.Empty Then c.BackColor = Color.LightYellow 
Next 
+2

+1 cho thường xuyên được giám sát' OfType (Of T) ' – igrimpe

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