有没有办法用一个命令改变’n’标签的颜色?

有没有办法用一个命令改变10个标签的颜色?

例如,而不是:

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 

我想只使用一个命令来更改ForeColor 。 例如,而不是Label1 ,它将是LabelX

您可以循环遍历标签类型的所有控件。 这应该可以解决问题。

 '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 

编辑像文森特建议所以我们之前不需要申报ctr。

正如Bugs在这里建议的是一个更短的选择:

 For Each ctr In Me.Controls.OfType(Of Label) ctr.ForeColor = Color.Black Next 

这是一个递归解决方案,它将解决放置在容器(如GroupBoxPanel Label控件的Panel

我将尝试向您展示差异,以解释为什么可能需要递归方法。 我正在使用Color.Red来说明差异。 您可以将代码更改为Color.Black

下面的代码将ForeColor属性设置为已放置在窗体上的Label控件上的Color.Red

 For Each lbl As Label In Me.Controls.OfType(Of Label)() lbl.ForeColor = Color.Red Next 

这就是它的样子:

在此处输入图像描述

你可以在这里看到只设置了Label4

以下代码将设置所有 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 

然后,您可以使用以下代码调用它:

 SetAllLabelsForeColor(Me) 

这是结果的屏幕截图:

在此处输入图像描述

您可以创建一个从1到X的循环,并通过将单词Label与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 

用法:

 SetLabelRangeColor(, ) 'Or: SetLabelRangeColor(, , ) 

用法示例:

 'Label 1-6: SetLabelRangeColor(6, Color.Red) 'Label 4-9: SetLabelRangeColor(4, 9, Color.Red) 
 For i As Integer = 1 To 7 Dim xL As Label = DirectCast(Controls("Label" & i.ToString), Label) xL.ForeColor = Color.Black Next