2017-04-10 113 views
1

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

例如,而不是:

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

回答

5

您可以遍历所有类型为label的控件。 这应该会诀窍。

'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 

主编文森特一样所以建议我们不需要之前声明的点击率。

由于错误提示这里是一个更短的选项:

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

你可以做一个循环,从1到X,并通过与X串联词Label按名称获取每个标签。

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) 
3

这是一个递归溶液将解决被置于容器内Label控制诸如GroupBoxPanel

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

下面的代码将在ForeColor属性设置为已放置在窗体上Color.RedLabel控制:

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

相关问题