はじめに
Windows Forms の DateTimePicker で、日付を「入力済み」か「未入力」か切り替えたいときに
重要な役割を果たすのが Checked プロパティ です。
特に ShowCheckBox = true のとき、チェックボックス付き DateTimePicker として
「この日付を有効にする/しない」をユーザーに選ばせることができます。
Checked は「この DateTimePicker の値を有効として扱うかどうか」を示すフラグです。
内部の
Value は常に存在しますが、Checked が false のときは「未選択扱い」にできます。
Checked プロパティとは?
| プロパティ名 | 型 | 役割 |
|---|---|---|
Checked |
bool |
DateTimePicker のチェックボックスがチェックされているかどうか |
特に ShowCheckBox = true の場合、
コントロールの左側にチェックボックスが表示され、その ON / OFF が Checked プロパティに反映されます。
Checked = true… 日付が「有効」として扱われる状態Checked = false… 日付が「未選択(無効)」と見なされる状態
ShowCheckBox との関係
Checked を実務で使うときは、ほぼ必ず ShowCheckBox とセットです。
// チェックボックス付き DateTimePicker にする
dateTimePicker1.ShowCheckBox = true;
// 初期状態は「未選択」に見せたい場合
dateTimePicker1.Checked = false;
// 逆に「最初から有効」にしたい場合
// dateTimePicker1.Checked = true;
チェックが外れているときは、日付表示がうっすらグレーになり、
ユーザーに「この日付は今は使われていない」ことが視覚的に伝わります。
Checked を切り替えてもユーザーには分かりません。
通常は ShowCheckBox = true と一緒に使うものと考えておきましょう。
Value と Checked の関係(NULL 相当の扱い)
DateTimePicker の Value は DateTime 型であり、NULL にはなりません。
そのため、「日付が未入力」という状態を表現したいとき、Value だけでは不十分です。
そこでよく使われるのが、「Checked = false を NULL 相当として扱う」という設計です。
例:DB に Nullable<DateTime> で保存する場合
// 画面側(フォームロードなど)
dateTimePicker1.ShowCheckBox = true;
// DBから読み込んだ期限日(NULL許容)
DateTime? deadline = GetDeadlineFromDb();
if (deadline.HasValue)
{
dateTimePicker1.Value = deadline.Value;
dateTimePicker1.Checked = true; // 有効な日付として表示
}
else
{
dateTimePicker1.Value = DateTime.Today; // 仮の値
dateTimePicker1.Checked = false; // 未選択扱い
}
// 保存時の処理
DateTime? newDeadline = null;
if (dateTimePicker1.Checked)
{
newDeadline = dateTimePicker1.Value; // チェックON時だけ有効
}
SaveDeadlineToDb(newDeadline);
このように、内部では Nullable<DateTime> を使いながら、
画面上では Checked の ON/OFF で「日付あり/なし」を表現できます。
Checked の読み書きの基本
現在の状態を取得する
bool isEnabled = dateTimePicker1.Checked;
if (isEnabled)
{
Console.WriteLine("日付は有効です。値: " + dateTimePicker1.Value.ToShortDateString());
}
else
{
Console.WriteLine("日付は未選択です。");
}
コードからチェック状態を変更する
// 日付を有効にする
dateTimePicker1.Checked = true;
// 日付を未選択扱いにする
dateTimePicker1.Checked = false;
ユーザーの操作だけでなく、ビジネスロジックに応じてコード側から ON/OFF することもできます。
Checked と ValueChanged / イベントの関係
ユーザーがチェックボックスを操作するとき、実際には次のようなイベントが絡んできます:
- ValueChanged … 値(Value)が変わったとき
- CheckedChanged(存在しない) … DateTimePicker には専用イベントはない
DateTimePicker には CheckedChanged イベントは無いため、
「チェックボックスの ON/OFF をトリガーにしたい」場合は ValueChanged や
CloseUp などと組み合わせるか、自前で前回値との比較を行う必要があります。
リアルタイムに UI を変えたい場合のみ、イベントを工夫して使いましょう。
実用パターン:開始日・終了日の「有効/無効」
よくあるのが、「終了日は任意」「終了日は指定しない場合もある」といった条件付き日付です。
// 開始日は必須
dateTimePickerStart.ShowCheckBox = false;
// 終了日は任意
dateTimePickerEnd.ShowCheckBox = true;
dateTimePickerEnd.Checked = false; // デフォルトは「終了日なし」
// 保存時
DateTime startDate = dateTimePickerStart.Value;
DateTime? endDate = null;
if (dateTimePickerEnd.Checked)
{
endDate = dateTimePickerEnd.Value;
}
// startDate, endDate を DB に保存…
このように、Checked を使うことで「日付の有効/無効」を自然に表現できます。
よくある注意点・ハマりポイント
- Checked = false でも Value は存在する
→ 「未選択だから Value は無視して良い」というルールを自分で決めておくことが重要です。 - ShowCheckBox = false のまま Checked を使おうとする
→ ユーザーからは見えないので、基本的には意味がありません。UI と一体で考えましょう。 - 必須入力なのに ShowCheckBox = true にしてしまう
→ ユーザーがチェックを外せてしまうため、「必須ならチェックボックス自体を出さない」方が安全です。 - デフォルト値の扱いがあいまい
→ 「値が無いときは Today を入れて Checked=false」といった
“画面内ルール” をきちんと決めておくと、後から迷わなくなります。
まとめ
Checkedは DateTimePicker の「日付が有効かどうか」を表すフラグ。ShowCheckBox = trueのとき、ユーザーがチェックボックスで ON/OFF を操作できる。Valueは常にDateTimeを持ち、NULL にはならない。
→ NULL 相当は「Checked = falseとして扱う」のが定番。- Nullable<DateTime> と組み合わせることで、DB や業務ロジックと自然に連携できる。
- 日付必須項目では ShowCheckBox を使わず、Checked も意識しない設計でシンプルに。
「日付があるか・ないか」「この日付は効いているのか」を表現するには、
Value だけでは足りず、Checked の出番になります。
特に業務アプリではよく使うパターンなので、ShowCheckBox + Checked + Nullable<DateTime> のセットで
一度実装してみると、イメージがつかみやすくなりますよ。
コメント