texto poner letra hacer forecolor como color clic cambiar boton c# vb.net label

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