我正在编写WinForms应用程序。我有许多代表某种状态的标签(启用/禁用等)。我希望每种状态都是不同的颜色(绿色,灰色......)。 我知道实现此目的的唯一方法是检查label.Text是否匹配所需状态,然后更改其ForeColor。但这是一个很难的方法,因为每次我在应用程序中设置状态标签时都需要执行此检查。
我想知道是否有办法“在一个地方?”。 例如,编写一个方法来检查特定字符串的所有标签,并从Form_Load()
中调用它答案 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