更改特定字符串的ForeColor标签

时间:2012-05-02 20:48:19

标签: c# .net winforms label

我正在编写WinForms应用程序。我有许多代表某种状态的标签(启用/禁用等)。我希望每种状态都是不同的颜色(绿色,灰色......)。 我知道实现此目的的唯一方法是检查label.Text是否匹配所需状态,然后更改其ForeColor。但这是一个很难的方法,因为每次我在应用程序中设置状态标签时都需要执行此检查。

我想知道是否有办法“在一个地方?”。 例如,编写一个方法来检查特定字符串的所有标签,并从Form_Load()

中调用它

4 个答案:

答案 0 :(得分:3)

您可以创建自己的自定义标签类,该类继承自Label类。像这样:

public class MyLabel : Label
{
    public MyLabel()
    {
        if(this.Text == "something")
        {
            this.ForeColor = Color.Green;
        }
    }

    protected override void OnTextChanged(EventArgs e)
    {
        if(this.Text == "something")
        {
            this.ForeColor = Color.Green;
        }
    }
}

所以不要使用Label而是在任何地方使用MyLabel。

答案 1 :(得分:1)

将所有标签添加到Form_Load()上的List中,然后您可以执行.Where(l => l.Text ==“您正在寻找的字符串”)。通过这些来适当地设置前景

答案 2 :(得分:0)

使用表单控件及其子控件枚举表单上的所有标签,例如使用此SO答案中的GetAll方法:

How to get ALL child controls of a Windows Forms form of a specific type (Button/Textbox)?

然后设置适当的颜色,如下所示:

var allLabels = GetAll(form, typeof(Label)); /// you can use this as first param if in form methods
foreach(Label oneLabel in allLabels)
{
  if (oneLabel.Text == "Something")
  {
    // set color or whatever
  }
}

答案 3 :(得分:0)

您还可以利用标签控件的Tag属性。将标签设置为“状态”,用于显示状态的所有标签控件,在Page_Load事件中,旋转循环以设置ForeColor。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    For Each control In Me.Controls
        If (TypeOf (control) Is Label) Then
            Dim statusLabel As Label
            statusLabel = control
            If (statusLabel.Tag = "Status") Then
                statusLabel.ForeColor = Color.Red
            End If
        End If
    Next
End Sub