はじめに
本記事では、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) 年は何を入れればいい?
年は無視されるため、2000 や 1 などダミーで構いません。必ず存在する日付(例:2/30 は不可)を指定してください。
4) BoldedDates/Monthly と混在させたい
単発(AddBoldedDate)、毎年(AddAnnuallyBoldedDate)、毎月(AddMonthlyBoldedDate)は併用可能です。まとめて設定した後に UpdateBoldedDates() を一度だけ呼ぶと効率的です。
まとめ
AnnuallyBoldedDates は「毎年同じ月日」を簡単に太字化します。
年は無視/反映は UpdateBoldedDates の 2 点を押さえ、祝日や記念日テーブルをループで追加するだけで、視認性の高いカレンダーが実現できます

コメント