更改特定字符串的标签前景色
本文关键字:标签 前景色 字符串 | 更新日期: 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