はじめに
Windows Forms の DateTimePicker には、ユーザーが選択できる日付の範囲を制限できる
MinDate と MaxDate という便利なプロパティがあります。
「過去の日付は選ばせたくない」「未来すぎる日付は無効にしたい」などの
業務アプリでよくある要件を、たった数行で実現できる重要プロパティです。
💡 一言でまとめると
MinDate / MaxDate = DateTimePicker の選択可能な“日付の範囲”を決めるプロパティ
MinDate / MaxDate = DateTimePicker の選択可能な“日付の範囲”を決めるプロパティ
MinDate / MaxDate とは?
| プロパティ | 型 | 説明 |
|---|---|---|
MinDate |
DateTime |
選択できる最小日付 |
MaxDate |
DateTime |
選択できる最大日付 |
初期値は以下のとおりです:
- MinDate = 1753/01/01
- MaxDate = 9998/12/31
つまり、特に制限しない限り広大な期間が初期状態です。
基本的な使い方
未来の日付を選ばせたくない(終了日 = 今日まで)
dateTimePicker1.MaxDate = DateTime.Today;
過去の日付を禁止する(予約システムなど)
dateTimePicker1.MinDate = DateTime.Today;
範囲を指定する(開始日〜終了日)
dateTimePicker1.MinDate = new DateTime(2020, 1, 1);
dateTimePicker1.MaxDate = new DateTime(2030, 12, 31);
設定範囲外の日付は、カレンダーで選択できないようグレーアウトされます。
値を変更するときの注意(例外が発生する場合あり)
MinDate と MaxDate は **Value より前後に設定できない** ため、
現在の Value が範囲外の場合は 例外が発生します。
例:今の Value が 2025/01/01 の場合
NG(例外発生):
dateTimePicker1.MinDate = new DateTime(2025, 2, 1); // Value のほうが小さい → エラー
OK(MinDate を狭める前に Value を調整):
dateTimePicker1.Value = new DateTime(2025, 2, 1);
dateTimePicker1.MinDate = new DateTime(2025, 2, 1);
✔ MinDate / MaxDate の変更時は
Value が範囲に収まっているか必ず確認するのがポイント!
Value が範囲に収まっているか必ず確認するのがポイント!
実務でのよくある利用例
① 生年月日入力(未来禁止)
dateTimePickerBirth.MaxDate = DateTime.Today;
② 予約システム(今日より前は不可)
dateTimePickerReserve.MinDate = DateTime.Today;
③ 開始日と終了日の整合性チェック
開始日を変更したら、終了日の最小値を自動調整するなど。
private void startDatePicker_ValueChanged(object sender, EventArgs e)
{
endDatePicker.MinDate = startDatePicker.Value;
}
④ DB の制約に合わせて日付範囲を制限
SQL Server の datetime 型は最小値が 1753/01/01 のため、
DateTimePicker の初期値は実はそのまま安全に使えます。
UI における動作(ユーザーの見え方)
選択できない日付は、次のように視覚的に無効表示されます。
- カレンダー内の日付がグレーになる
- 範囲外の日付をクリックしても反応しない
- キーボードでの入力でも自動的に補正される
💡 手動で文字入力しても範囲外なら 自動で範囲内最寄りの日付に補正されます。
MinDate / MaxDate を使うときの注意点
- Value のほうが範囲外だと例外発生(要注意)
- ShowUpDown 使用時も制限は有効
(値が飛び越えないよう自動調整される) - 必須入力と組み合わせる場合は範囲設定に気を付ける
- 保存側(DB)との日付範囲が一致しているか確認する
まとめ
- MinDate / MaxDate は DateTimePicker の日付選択範囲を制限するプロパティ。
- ユーザーの誤入力を防ぎ、業務ルールに沿った日付入力を強制できる。
- Value が範囲外だと例外が発生するため、順番に注意して設定する。
- 予約・期限・開始/終了日の整合性など、実務アプリでの利用頻度が非常に高い。
日付の範囲制限は、入力ミスを根本から減らす最強の手段です。
UI の品質向上につながるので、ぜひ積極的に活用してみてくださいね。
Please follow and like us:

コメント