[C#][Windows Formsアプリ][MonthCalendar] ForeColor / BackColor と TitleBackColor / TitleForeColor の基本

スポンサーリンク

はじめに

本記事では、Windows Forms の MonthCalendar におけるForeColor / BackColorTitleBackColor / 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 も加えて仕上げましょう。

Please follow and like us:

コメント

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