[C#][Windows Formsアプリ][MonthCalendar] TodayDate / ShowToday / ShowTodayCircle:今日の見せ方を極める

スポンサーリンク

はじめに

Windows Forms の MonthCalendar には「今日」の見え方を調整するための TodayDate / ShowToday / ShowTodayCircle があります。本記事ではこの3つの役割と使い分けを最短で押さえ、最小コードで「今日」の表示を自在にコントロールする方法を解説します。

説明

・TodayDate:カレンダーが「今日」と見なす基準日。実際のシステム日付とは独立して変更できます(「今日は来週だと仮定してプレビュー」などの用途)。

・ShowToday:コントロール下部に出る「Today: yyyy/MM/dd」フッター行の表示/非表示。

・ShowTodayCircle:月面上の「今日」セルに付く丸印の表示/非表示。

ポイントは、「選択中の日付」には影響しないこと。これらは UI の見え方(基準日と装飾)のみを変えます。選択は SelectionStart/SelectionEndSetSelectionRange で制御します。

サンプルコード(極小)

チェックボックスでフッターと丸印の表示を切替、ボタンで「今日の基準日」をズラしたり戻したりする最小サンプルです。

 
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 等)で制御する、という役割分担を覚えておきましょう。

Please follow and like us:

コメント

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