在Windows窗体应用程序中,我有六个带有标签的文本框。每个标签显示从星期一到星期六的日期。还有按钮分别导航到上一周和下周 我希望每次加载时都能在RED中突出显示当前日期。虽然我已经设法实现这一点,但每次我点击下一个/上一个按钮时,标签仍然保持着色。例如,如果当前日期是11月29日星期四(以红色突出显示),单击下一个按钮将在该标签上显示12月6日星期四,但也会以红色突出显示错误,因为12月06日星期四不是当前日期。我有什么想法可以解决这个问题吗?这是我改变标签颜色的代码。感谢
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;
答案 0 :(得分:6)
我认为问题在于您正在混合BackColor
和ForeColor
设置。删除重复的逻辑并在一个地方以相同的方式应用样式。创建方法
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; }
}