はじめに
本記事では、Windows Forms の MonthCalendar におけるForeColor / BackColor と TitleBackColor / TitleForeColor の基本を、最短で理解できるように整理します。
ヘッダー(タイトル帯)と月面(各日セル)の配色を分けて設定するコツを、極小サンプルで確認します。
説明
役割の切り分け
・ForeColor … 月面の「日付文字(当月日)」の色。
・BackColor … 月面の背景色。
・TitleBackColor … タイトル帯(「<月 年>」や曜日見出し)部分の背景色。
・TitleForeColor … タイトル帯の文字色。
(補足:前後月の数字色は TrailingForeColor で別途設定できます)
ポイント:
・配色は視認性優先で文字色と背景色のコントラストを確保(例:暗い背景 × 明るい文字)。
・ユーザー環境(DPI/テーマ/ハイコントラスト)に配慮し、SystemColors をベースにすると安全。
・配色変更は選択範囲や今日マークのロジックには影響せず、見た目のみ変わります。
サンプルコード(極力短く)
ボタンで 3 種の配色プリセットを切替えます。
using System;
using System.Drawing;
using System.Windows.Forms;
class MainForm : Form
{
MonthCalendar cal = new MonthCalendar { Dock = DockStyle.Fill };
public MainForm()
{
Text = "MonthCalendar Colors";
var panel = new FlowLayoutPanel { Dock = DockStyle.Top, AutoSize = true };
var bDark = new Button { Text = "ダーク" };
var bLight = new Button { Text = "ライト" };
var bAccent = new Button { Text = "アクセント" };
bDark.Click += (s, e) => Apply(Color.White, Color.Black, Color.Black, Color.White);
bLight.Click += (s, e) => Apply(SystemColors.WindowText, SystemColors.Window,
SystemColors.ActiveCaption, SystemColors.ActiveCaptionText);
bAccent.Click+= (s, e) => Apply(Color.DimGray, Color.MintCream, Color.MediumSeaGreen, Color.White);
panel.Controls.AddRange(new Control[] { bDark, bLight, bAccent });
Controls.Add(cal);
Controls.Add(panel);
// 既定テーマ
Apply(SystemColors.WindowText, SystemColors.Window,
SystemColors.ActiveCaption, SystemColors.ActiveCaptionText);
}
void Apply(Color fore, Color back, Color titleBack, Color titleFore)
{
cal.ForeColor = fore;
cal.BackColor = back;
cal.TitleBackColor = titleBack;
cal.TitleForeColor = titleFore;
// 必要に応じて cal.TrailingForeColor も設定
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MainForm());
}
}
つまづきポイント
1) 文字が読みにくい
背景と文字のコントラスト不足が原因。暗い背景には明るい文字、明るい背景には暗い文字を徹底しましょう。
2) 前後月の日付色だけ浮く/薄い
TrailingForeColor を併用すると調整できます。
3) テーマやハイコントラストで見え方が変わる
SystemColors をベースに配色すると環境差に強くなります。固定色を使う場合は複数環境での確認を。
まとめ
ForeColor/BackColor は月面、TitleBackColor/TitleForeColor はタイトル帯と曜日見出しの配色。役割を分けて設定し、コントラストを確保するだけで、視認性の高いカレンダーを手早く作れます。必要に応じて TrailingForeColor も加えて仕上げましょう。

コメント