有没有办法用一个命令改变’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
这是一个递归解决方案,它将解决放置在容器(如GroupBox
或Panel
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