【问题标题】: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")。遍历这些以适当地设置前景色

      【讨论】:

        【解决方案3】:

        使用表单控件及其子控件枚举表单上的所有标签,例如使用此 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
          }
        }
        

        【讨论】:

          【解决方案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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-16
            • 1970-01-01
            • 2014-05-08
            • 1970-01-01
            • 2011-05-22
            • 1970-01-01
            • 1970-01-01
            • 2020-08-22
            相关资源
            最近更新 更多