C#标签(改变标签颜色)

C#标签(改变标签颜色),c#,winforms,label,C#,Winforms,Label,在windows窗体应用程序中,我有六个带有标签的文本框。每个标签都显示从周一到周六的日期。还有一些按钮可分别导航到上一周和下一周。 我希望能够在每次从加载时以红色突出显示当前日期。虽然我成功地做到了这一点,但每次单击“下一步/上一步”按钮时,标签仍然保持彩色。例如,如果当前日期为11月29日星期四(以红色突出显示),单击“下一步”按钮将在该标签上显示06 December Thready,但也以红色突出显示,这是错误的,因为06 December Thready不是当前日期。有没有办法解决这个

在windows窗体应用程序中,我有六个带有标签的文本框。每个标签都显示从周一到周六的日期。还有一些按钮可分别导航到上一周和下一周。
我希望能够在每次从加载时以红色突出显示当前日期。虽然我成功地做到了这一点,但每次单击“下一步/上一步”按钮时,标签仍然保持彩色。例如,如果当前日期为11月29日星期四(以红色突出显示),单击“下一步”按钮将在该标签上显示06 December Thready,但也以红色突出显示,这是错误的,因为06 December Thready不是当前日期。有没有办法解决这个问题?这是我更改标签颜色的代码。谢谢

         if (label1.Text == DateTime.Now.ToString("dd MMMM dddd"))
            label1.ForeColor = Color.Red;
        else label1.ForeColor = Color.Black;

         if (label2.Text == DateTime.Now.ToString("dd MMMM dddd"))
             label2.ForeColor = Color.Red;
         else label2.ForeColor = Color.Black;

         if (label3.Text == DateTime.Now.ToString("dd MMMM dddd"))
             label3.BackColor = Color.Red;
         else label3.ForeColor = Color.Black;

         if (label4.Text == DateTime.Now.ToString("dd MMMM dddd"))
            label4.BackColor = Color.Red;
         else label4.ForeColor = Color.Black;

         if (label5.Text == DateTime.Now.ToString("dd MMMM dddd"))
            label5.BackColor = Color.Red;
         else label5.ForeColor = Color.Black;

         if (label6.Text == DateTime.Now.ToString("dd MMMM dddd"))
            label6.BackColor = Color.Red;
         else label6.ForeColor = Color.Black;

我认为问题在于您正在混合
背景色
前景色
设置。删除重复的逻辑并在一个位置以相同的方式应用样式。创建方法

private void ApplyStyleTo(Label label)
{
    label.ForeColor = GetLabelForeColor(label.Text);
}

private Color GetLabelForeColor(string text)
{
    string todayText = DateTime.Now.ToString("dd MMMM dddd");
    return (text == todayText) ? Color.Red : Color.Black;
}
并将样式应用于所有标签:

ApplyStyleTo(label1);
// ...
ApplyStyleTo(label6);

顺便说一句实际上,我会更进一步,创建用于显示日期的自定义标签。将这些标签放置在表单上,并按如下方式设置其
Date
属性:

dateLabel1.Date = DateTime.Now;
标签将设置日期的格式和颜色。您将能够更改日期格式和颜色

public class DateLabel : Label
{
    private DateTime? _date;

    public DateLabel()
    {
        Format = "dd MMMM dddd";
        TodayForeColor = Color.Red;
    }

    public DateTime? Date
    {
        get { return _date; }
        set {
            _date = value;
            Text = _date.HasValue ? _date.Value.ToString(Format) : "";
            ForeColor = IsToday ? TodayForeColor : ForeColor;
        }
    }

    public bool IsToday
    {
        get  {
            if (!_date.HasValue)
                return false;    
            return _date.Value.Date == DateTime.Today;
        }
    }

    public string Format { get; set; }
    public Color TodayForeColor { get; set; }
}

使用调试器确保您认为正在发生的事情实际上正在发生。这是wpf吗?为什么不使用绑定?@ArsenMkrt:“在Windows窗体应用程序中…”很简单,您的测试总是返回true。现在,您只需使用调试工具找出原因。(在任何测试之前设置断点并检查labelX.text)。另外,如果您使用的是
BackColor
属性,则文本不会更改。@dhani:为什么要混合
BackColor
ForeColor
BackColor
TextBox
的背景色,
ForeColor
TextBox
内的文本色。您应该始终只使用其中一个。