はじめに
本記事では、Windows Forms の MonthCalendar における AddBoldedDate / RemoveBoldedDate / RemoveAllBoldedDates の使い分けを、実務に直結する最短パターンで解説します。
「特定日を太字にする」「取り消す」「一括で初期化する」操作を安全に行い、UpdateBoldedDates() で確実に反映する流れを押さえます。
説明
基本APIの役割
・AddBoldedDate(DateTime date):単発のその日だけを太字に追加。
・RemoveBoldedDate(DateTime date):単発太字からその日を除去。
・RemoveAllBoldedDates():単発太字(Annually/Monthly は対象外)を全部クリア。
いずれの操作後も、UpdateBoldedDates() を呼ばないと画面に反映されません。複数日をまとめて更新する場合は、「全ての追加・削除 → 最後に1回だけ」呼ぶのが効率的です。
サンプルコード
最小UI:MonthCalendar と 3 つのボタン(追加/削除/全削除)。「今日」を対象に挙動を確認します。
using System;
using System.Linq;
using System.Windows.Forms;
class MainForm : Form
{
private MonthCalendar cal = new MonthCalendar { Dock = DockStyle.Fill };
private Button btnAdd = new Button { Text = "今日を太字に追加", Dock = DockStyle.Top };
private Button btnRemove = new Button { Text = "今日の太字を削除", Dock = DockStyle.Top };
private Button btnClear = new Button { Text = "単発太字を全クリア", Dock = DockStyle.Top };
public MainForm()
{
Text = "MonthCalendar - Add/Remove/RemoveAll BoldedDates";
Controls.Add(cal);
Controls.Add(btnClear);
Controls.Add(btnRemove);
Controls.Add(btnAdd);
btnAdd.Click += (s, e) =>
{
var d = DateTime.Today.Date;
cal.AddBoldedDate(d);
cal.UpdateBoldedDates(); // 反映
};
btnRemove.Click += (s, e) =>
{
var d = DateTime.Today.Date;
cal.RemoveBoldedDate(d);
cal.UpdateBoldedDates(); // 反映
};
btnClear.Click += (s, e) =>
{
cal.RemoveAllBoldedDates(); // 単発の太字のみ全削除(Annually/Monthly は残る)
cal.UpdateBoldedDates(); // 反映
};
}
// --- 補足:一括登録の最短パターン(必要に応じて呼び出し) ---
private void BulkSetBoldedDates()
{
cal.RemoveAllBoldedDates();
foreach (var d in new[]
{
new DateTime(2026, 1, 1),
new DateTime(2026, 5, 3),
new DateTime(2026, 12, 25)
})
{
cal.AddBoldedDate(d);
}
cal.UpdateBoldedDates(); // 最後に1回だけ
}
// --- 補足:重複追加を避ける安全追加 ---
private void AddBoldedDateIfNotExists(DateTime day)
{
bool already = Array.Exists(cal.BoldedDates, x => x.Date == day.Date);
if (!already)
{
cal.AddBoldedDate(day.Date);
cal.UpdateBoldedDates();
}
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MainForm());
}
}
補足:一括登録の最短パターン
cal.RemoveAllBoldedDates();
foreach (var d in new[] {
new DateTime(2026, 1, 1),
new DateTime(2026, 5, 3),
new DateTime(2026, 12, 25) }
)
cal.AddBoldedDate(d);
cal.UpdateBoldedDates(); // 最後に1回回
つまづきポイント
1) 反映されない
UpdateBoldedDates() の呼び忘れが定番。まとめて更新するときも最後に必ず1回呼びましょう。
2) 全削除しても毎年/毎月の太字が残る
RemoveAllBoldedDates() は「単発」のみが対象。毎年は RemoveAllAnnuallyBoldedDates()、毎月は RemoveAllMonthlyBoldedDates() を使用します(または個別に Remove 系で除去)。
3) 同じ日を重複追加してしまう
重複しても例外にはなりませんが、前処理で BoldedDates に存在するかを確認すると安全です。
var d = DateTime.Today.Date; bool already = Array.Exists(cal.BoldedDates, x => x.Date == d) if (!already) cal.AddBoldedDate(d);
4) Annually/Monthly と混同する
単発日は AddBoldedDate、毎年は AddAnnuallyBoldedDate、毎月は AddMonthlyBoldedDate。用途で明確に使い分けましょう。
まとめ
単発太字は AddBoldedDate と RemoveBoldedDate、全消去は RemoveAllBoldedDates。そして最後に UpdateBoldedDates()。この基本フローを徹底するだけで、太字ハイライトの管理はシンプルかつ堅牢になります。用途に応じて Annually/Monthly 系も組み合わせましょう。
コメント