如何更改表单上所有标签的ForeColor?

时间:2011-02-23 21:16:18

标签: .net vb.net winforms label

是否可以在运行时更改表单上所有标签的ForeColor,包括尚未调用的表单?这样所有标签在整个应用程序中都具有相同的颜色。

2 个答案:

答案 0 :(得分:4)

您只需要遍历所有Form的控件以查找标签。控件可以有子控件,因此您希望以递归方式执行此操作:

Private Sub UpdateLabelFG(ByVal controls As ControlCollection, ByVal fgColor As Color)
    If controls Is Nothing Then Return
    For Each C As Control In controls
        If TypeOf C Is Label Then DirectCast(C, Label).ForeColor = fgColor
        If C.HasChildren Then UpdateLabelFG(C.Controls, fgColor)
    Next
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    UpdateLabelFG(Me.Controls, Color.Red)
End Sub

答案 1 :(得分:1)

我认为这不像你想象的那么微不足道。循环浏览特定表单上的所有控件并设置前景很容易。但是如果打开多个表单并将一种形式设置为一种形式;让所有形式改变颜色将成为一个问题。

我会说,创建一个继承自System.Windows.Forms.Form的Form类;在整个申请过程中使用这个新表格。添加一个私有子,它接收颜色并循环通过窗体的控件,将标签forecolor设置为所需的颜色(请参阅Chris Haas的帖子,以获得一个很好的例子)。

然后创建一个单独的ColorManager类。整个应用程序只有一种前景色。 ColorManager应该有一个在更改颜色时触发的公共事件,以及一个用于设置颜色的'SetColor'函数(或者你喜欢的属性)。

然后,返回到表单类,为ColorManager的更改颜色事件添加事件处理程序。

现在任何表单都可以设置应用程序范围的前景色,所有打开的表单都会响应该事件并适当设置其颜色。