【问题标题】:change label ForeColor for specific string更改特定字符串的标签 ForeColor
【发布时间】:2012-05-02 20:48:18
【问题描述】:
我正在编写一个 WinForms 应用程序。我有很多标签代表某种状态(启用/禁用等)。我希望每个状态都是不同的颜色(绿色,灰色......)。
我知道实现这一点的唯一方法是检查 label.Text 是否与所需状态匹配,然后更改其前景色。但这是一个困难的方法,因为我每次在应用程序中设置状态标签时都需要执行此检查。
我想知道是否有任何方法可以“在一个地方”做到这一点?
例如编写一个方法来检查特定字符串的所有标签,然后从 Form_Load() 中调用它
【问题讨论】:
标签:
c#
.net
winforms
label
【解决方案1】:
您可以创建自己的自定义标签类,该类继承自标签类。像这样的:
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;
}
}
}
所以不要在任何地方使用标签,而是使用 MyLabel。
【解决方案2】:
将所有标签添加到 Form_Load() 上的列表中,然后您可以执行 .Where(l => l.Text == "String you are looking for")。遍历这些以适当地设置前景色
【解决方案4】:
您还可以利用标签控件的 Tag 属性。将用于显示状态的所有标签控件的 Tag 设置为“Status”,并在 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