poner - label color c#
¿Hay alguna manera de cambiar el color de las ''n'' etiquetas junto con un comando? (4)
¿Hay alguna manera de cambiar el color de 10 etiquetas junto con un comando?
Por ejemplo, en lugar de:
Label1.ForeColor = Color.Black
Label2.ForeColor = Color.Black
Label3.ForeColor = Color.Black
Label4.ForeColor = Color.Black
Label5.ForeColor = Color.Black
Label6.ForeColor = Color.Black
Label7.ForeColor = Color.Black
Me gustaría usar solo un comando para cambiar el ForeColor
. Por ejemplo, en lugar de Label1
sería LabelX
.
Esta es una solución recursiva que abordará los controles Label
que se colocan dentro de contenedores, como un GroupBox
o un Panel
.
Intentaré mostrarle la diferencia para explicar por qué puede ser necesario un método recursivo. Estoy usando Color.Red
para ilustrar la diferencia. Cambiarías el código a Color.Black
.
El siguiente código establecerá la propiedad Color.Red
en Color.Red
en los controles de Label
que se han colocado en su formulario:
For Each lbl As Label In Me.Controls.OfType(Of Label)()
lbl.ForeColor = Color.Red
Next
Así es como se verá:
Puede ver aquí que solo se configuró Label4
.
El siguiente código establecerá todos los controles de Label
:
Private Sub SetAllLabelsForeColor(ByVal parent As Control)
For Each c As Control In parent.Controls
If TypeOf (c) Is Label Then
c.ForeColor = Color.Red
Else
If c.HasChildren Then
SetAllLabelsForeColor(c)
End If
End If
Next
End Sub
A continuación, puede llamar a esto con el siguiente código:
SetAllLabelsForeColor(Me)
Esta es una captura de pantalla del resultado:
Puede hacer un ciclo que va de 1 a X y obtener cada etiqueta por nombre concatenando la palabra Label
con X.
Private Sub SetLabelRangeColor(ByVal [End] As Integer, ByVal Color As Color)
SetLabelRangeColor(1, [End], Color)
End Sub
Private Sub SetLabelRangeColor(ByVal Start As Integer, ByVal [End] As Integer, ByVal Color As Color)
If Start > [End] Then Throw New ArgumentOutOfRangeException
For x = Start To [End]
Dim TargetLabel As Label = TryCast(Me.Controls("Label" & x), Label)
If TargetLabel IsNot Nothing Then
TargetLabel.ForeColor = Color
End If
Next
End Sub
Uso:
SetLabelRangeColor(<end label no.>, <color>)
''Or:
SetLabelRangeColor(<start label no.>, <end label no.>, <color>)
Ejemplos de uso:
''Label 1-6:
SetLabelRangeColor(6, Color.Red)
''Label 4-9:
SetLabelRangeColor(4, 9, Color.Red)
Puede recorrer todos los controles de la etiqueta de tipo. Esto debería funcionar.
''For each control in the form
For Each ctrl As Control In Me.Controls
''If its of type label
If TypeOf ctrl Is Label Then
''Change the color
ctrl.ForeColor = Color.Black
End If
Next
Editado como Vincent sugirió para que no tengamos que declarar ctr antes.
Como Bugs sugirió aquí es una opción aún más corta:
For Each ctr In Me.Controls.OfType(Of Label)
ctr.ForeColor = Color.Black
Next
For i As Integer = 1 To 7
Dim xL As Label = DirectCast(Controls("Label" & i.ToString), Label)
xL.ForeColor = Color.Black
Next