Estoy tratando de hacer un bucle foreach que comprueba cada cuadro de texto en un panel y los cambios BackColor si su Texto no es nada. He intentado lo siguiente:

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

pero me da el error:

No se puede convertir un objeto de tipo System.Windows.Los formularios.Etiqueta de tipo
Sistema.windows.los formularios.cuadro de texto

Si no tienen controles de cuadro de texto en el panel, usted necesita para permitir que para ellos.
¿Cómo puedo hacerlo?
posibles duplicados de no se puede convertir un objeto de tipo ‘System.Windows.Los formularios.El botón’ escribir > ‘del Sistema.Windows.Los formularios.El texto’

OriginalEl autor Lift | 2012-11-22

3 Comentarios

  1. 11

    Usted podría intentar algo como esto en su lugar:

      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
    Trabajó como un encanto! Gracias!
    Se desea establecer el color de la espalda de nuevo después de que tipo de texto, que en este ejemplo no lo hace.
    En este ejemplo en particular, el condicional podría ser simplificado a If (ctrl.GetType() Is GetType(TextBox)) Then ctrl.BackColor = Color.LightYellow

    OriginalEl autor Colin Pear

  2. 15

    Suponiendo que no existen controles anidados:

    For Each c As TextBox In Panel1.Controls.OfType(Of TextBox)()
      If c.Text = String.Empty Then c.BackColor = Color.LightYellow
    Next
    +1 para la frecuencia supervisado OfType(Of T)

    OriginalEl autor Neolisk

  3. 2

    Probar esta. Va a poner el color de fondo cuando se ingresan los datos así

        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

    También hay una forma diferente de hacer esto, lo que implica la creación de una herencia control de cuadro de texto y el uso que en su forma:

    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
    Todavía lanza la misma excepción, sin embargo, la respuesta anterior trabajado que era muy similar. Gracias de todos modos.

    OriginalEl autor Derek Tomes

Dejar respuesta

Please enter your comment!
Please enter your name here