更改特定字符串的标签前景色

本文关键字:标签 前景色 字符串 | 更新日期: 2023-09-27 18:32:53

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

我想知道是否有任何方法可以"在一个地方"做到这一点?例如,编写一个方法,该方法将检查特定字符串的所有标签,并从 Form_Load()

更改特定字符串的标签前景色

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。

将所有标签添加到 Form_Load() 上的列表中,然后您可以执行 .其中(l => l.Text == "你正在寻找的字符串")。遍历这些以适当地设置前景色

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

如何获取特定类型(按钮/文本框)的 Windows 窗体窗体的所有子控件?

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

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
  }
}

还可以利用标签控件的 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