有没有办法改变' n'标签和一个命令?

时间:2017-04-10 07:28:21

标签: c# vb.net label

有没有办法用一个命令改变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

4 个答案:

答案 0 :(得分:5)

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

'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

答案 1 :(得分:3)

这是一个递归解决方案,可以解决放置在LabelGroupBox等容器中的Panel个控件。

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

以下代码会将ForeColor属性设置为Color.Red已放置在表单上的Label控件上:

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

这就是它的样子:

enter image description here

您可以在此处看到只设置了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)

这是结果的截图:

enter image description here

答案 2 :(得分:1)

For i As Integer = 1 To 7
    Dim xL As Label = DirectCast(Controls("Label" & i.ToString), Label)
    xL.ForeColor = Color.Black
Next

答案 3 :(得分:1)

您可以创建一个从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(<end label no.>, <color>)
'Or:
SetLabelRangeColor(<start label no.>, <end label no.>, <color>)

用法示例:

'Label 1-6:
SetLabelRangeColor(6, Color.Red)

'Label 4-9:
SetLabelRangeColor(4, 9, Color.Red)