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

标签 c# winforms label

在 Windows 窗体应用程序中,我有六个带有标签的文本框。每个标签显示从星期一到星期六的日期。还有一些按钮可以分别导航到前一周和下一周。
我希望能够在每次加载 from 时以红色突出显示当前日期。虽然我已经设法实现了这一点,但每次我单击下一个/上一个按钮时,标签仍然保持彩色。例如,如果当前日期是 11 月 29 日星期四(以红色突出显示),单击下一步按钮将在该标签上显示 12 月 6 日星期四,但也会以红色突出显示,这是错误的,因为 12 月 6 日星期四不是当前日期。有什么想法可以解决这个问题吗?这是我更改标签颜色的代码。谢谢

         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;

最佳答案

我认为问题在于您混合了 BackColorForeColor 设置。删除重复的逻辑并在一个地方以相同的方式应用样式。创建方法

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);

BTW 实际上,我会更进一步并创建用于显示日期的自定义标签。将这些标签放在您的表单上并像这样设置它们的 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; }
}

关于C# 标签(改变标签颜色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13632405/

相关文章:

python - 使用 tkinter 在带有 for 语句的标签中显示图片,可以做到吗?

symfony - 如何在 Symfony Twig 中显示覆盖复选框的标签

c# - 为什么第二个 IF 语句检测到无法访问的代码?

VB6 的 Base64 编码的 C# 版本

c# - 有没有办法不按ALT就强制显示助记键?

c# - 隐藏轴,同时仍然能够缩放和平移

javafx gridpane 居中对齐并对齐所有标签

c# - 为什么有人说 "Builder Pattern"比使用 Fluent 接口(interface)的扩展方法更好?

c# - 将Matlab模糊逻辑工具箱fis文件转换为c#/c++/javascript

.net - ToolStripStatusLabel DoubleClick 不起作用?