[C#][Windows Formsアプリ][DateTimePicker] MinDate/MaxDateプロパティで入力可能な日付範囲を制限する

スポンサーリンク

はじめに

Windows Forms の DateTimePicker には、ユーザーが選択できる日付の範囲を制限できる
MinDateMaxDate という便利なプロパティがあります。

「過去の日付は選ばせたくない」「未来すぎる日付は無効にしたい」などの
業務アプリでよくある要件を、たった数行で実現できる重要プロパティです。

💡 一言でまとめると
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 が範囲に収まっているか必ず確認するのがポイント!

 

実務でのよくある利用例

① 生年月日入力(未来禁止)

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:

コメント

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