4

Windows フォーム アプリケーションには、ラベルが付いた 6 つのテキスト ボックスがあります。各ラベルには、月曜日から土曜日までの日付が表示されます。前の週と次の週にそれぞれ移動するためのボタンもあります。
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;
4

1 に答える 1

6

BackColor問題は、混合して設定していることだと思いますForeColor。重複するロジックを削除し、同じ方法で 1 か所にスタイルを適用します。メソッドの作成

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; }
}
于 2012-11-29T18:54:13.167 に答える