[C#][Windows Formsアプリ][MonthCalendar] 毎年同じ日を自動で太字にする

スポンサーリンク

はじめに

本記事では、Windows Forms の MonthCalendar毎年同じ月日を太字で強調する AnnuallyBoldedDates の基本を、最短で理解します。祝日・記念日・誕生日など「毎年同じ日」を自然にハイライトして、ユーザーの視線誘導と可読性を高めましょう。

説明

AnnuallyBoldedDates は API 群(AddAnnuallyBoldedDate / RemoveAnnuallyBoldedDate / UpdateBoldedDates)で操作します。
ポイント:

・引数の DateTime月日だけが意味を持ち、年は無視されます(例:new DateTime(2000, 2, 11) でも 2000 は任意)。
AddAnnuallyBoldedDate / RemoveAnnuallyBoldedDate の後は、UpdateBoldedDates() を呼んで画面に反映します。
・単発日の強調は AddBoldedDate、毎月同じ日なら AddMonthlyBoldedDate を使います(使い分け)。

サンプルコード

起動時に「元日」「クリスマス」を毎年太字、ボタンで「建国記念の日(2/11)」の追加/解除を行う最小サンプルです。

 using System;
using System.Windows.Forms;

class MainForm : Form
{
    MonthCalendar cal = new MonthCalendar { Dock = DockStyle.Fill };
    Button btnAdd    = new Button { Text = "2/11 を毎年太字に", Dock = DockStyle.Top };
    Button btnRemove = new Button { Text = "2/11 の太字を解除", Dock = DockStyle.Top };

    public MainForm()
    {
        Text = "MonthCalendar - AnnuallyBoldedDates 基本";
        Controls.Add(cal);
        Controls.Add(btnRemove);
        Controls.Add(btnAdd);

        // 起動時に毎年の太字を2つだけ設定(年はダミーでOK)
        cal.AddAnnuallyBoldedDate(new DateTime(2000, 1, 1));   // 毎年 1/1
        cal.AddAnnuallyBoldedDate(new DateTime(2000, 12, 25)); // 毎年 12/25
        cal.UpdateBoldedDates();

        btnAdd.Click += (s, e) =>
        {
            cal.AddAnnuallyBoldedDate(new DateTime(2000, 2, 11)); // 毎年 2/11
            cal.UpdateBoldedDates();
        };

        btnRemove.Click += (s, e) =>
        {
            cal.RemoveAnnuallyBoldedDate(new DateTime(2000, 2, 11));
            cal.UpdateBoldedDates();
        };
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.Run(new MainForm());
    }
}

つまづきポイント

1) 追加したのに太字にならない
UpdateBoldedDates() の呼び忘れが定番です。追加・削除の一連処理の最後に必ず呼びましょう。

2) うるう年(2/29)の扱い
new DateTime(2000, 2, 29) を毎年太字にしても、2/29 が存在しない年は当然表示されません。要件に応じて「2/28 と 3/1 も太字にする」などの補完は別ロジックで。

3) 年は何を入れればいい?
年は無視されるため、20001 などダミーで構いません。必ず存在する日付(例:2/30 は不可)を指定してください。

4) BoldedDates/Monthly と混在させたい
単発(AddBoldedDate)、毎年(AddAnnuallyBoldedDate)、毎月(AddMonthlyBoldedDate)は併用可能です。まとめて設定した後に UpdateBoldedDates() を一度だけ呼ぶと効率的です。

まとめ

AnnuallyBoldedDates は「毎年同じ月日」を簡単に太字化します。
年は無視/反映は UpdateBoldedDates の 2 点を押さえ、祝日や記念日テーブルをループで追加するだけで、視認性の高いカレンダーが実現できます

Please follow and like us:

コメント

タイトルとURLをコピーしました