はじめに
Windows Forms の MonthCalendar には「今日」の見え方を調整するための TodayDate / ShowToday / ShowTodayCircle があります。本記事ではこの3つの役割と使い分けを最短で押さえ、最小コードで「今日」の表示を自在にコントロールする方法を解説します。
説明
・TodayDate:カレンダーが「今日」と見なす基準日。実際のシステム日付とは独立して変更できます(「今日は来週だと仮定してプレビュー」などの用途)。
・ShowToday:コントロール下部に出る「Today: yyyy/MM/dd」フッター行の表示/非表示。
・ShowTodayCircle:月面上の「今日」セルに付く丸印の表示/非表示。
ポイントは、「選択中の日付」には影響しないこと。これらは UI の見え方(基準日と装飾)のみを変えます。選択は SelectionStart/SelectionEnd や SetSelectionRange で制御します。
サンプルコード(極小)
チェックボックスでフッターと丸印の表示を切替、ボタンで「今日の基準日」をズラしたり戻したりする最小サンプルです。
using System;
using System.Windows.Forms;
class MainForm : Form
{
public MainForm()
{
Text = "MonthCalendar - Today の見せ方";
var cal = new MonthCalendar { Dock = DockStyle.Fill };
var panel = new FlowLayoutPanel { Dock = DockStyle.Top, AutoSize = true };
var cbFooter = new CheckBox { Text = "ShowToday", Checked = true };
var cbCircle = new CheckBox { Text = "ShowTodayCircle", Checked = true };
var btnNextWeek = new Button { Text = "今日を+7日に見せる" };
var btnReset = new Button { Text = "今日に戻す" };
cbFooter.CheckedChanged += (s, e) => cal.ShowToday = cbFooter.Checked;
cbCircle.CheckedChanged += (s, e) => cal.ShowTodayCircle = cbCircle.Checked;
btnNextWeek.Click += (s, e) => cal.TodayDate = DateTime.Today.AddDays(7);
btnReset.Click += (s, e) => cal.TodayDate = DateTime.Today;
panel.Controls.Add(cbFooter);
panel.Controls.Add(cbCircle);
panel.Controls.Add(btnNextWeek);
panel.Controls.Add(btnReset);
Controls.Add(cal);
Controls.Add(panel);
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MainForm());
}
}
つまづきポイント
1) 「TodayDate を変えても選択が変わらない」
仕様です。今日の基準表示だけが変わります。選択を動かしたい場合は SetSelectionRange() を使います。
2) 丸印だけ消したい/フッターだけ消したい
ShowTodayCircle(丸印)と ShowToday(フッター)は独立に切り替え可能です。
3) 「今日」は常にシステム日付に戻したい
任意操作後に TodayDate = DateTime.Today; を再設定すればOK。
まとめ
TodayDate は「今日の基準日」、ShowToday はフッター、ShowTodayCircle は丸印。用途に応じてこれらを組み合わせると、ガイドやプレビューとしての「今日」表示を柔軟に演出できます。選択そのものは別API(SetSelectionRange 等)で制御する、という役割分担を覚えておきましょう。

コメント