はじめに
DateTimePicker を扱ううえで最も重要なイベントが
ValueChanged イベント です。
ユーザーが日付を変更したタイミングを正確にキャッチし、
それに応じた処理を行いたい場合に必ず使用します。
💡 一言まとめ:
ValueChanged = 日付・時刻が変更された瞬間に発火するイベント
ValueChanged = 日付・時刻が変更された瞬間に発火するイベント
ValueChanged の基本情報
| イベント名 | ValueChanged |
|---|---|
| 発生タイミング | DateTimePicker の Value が変更された瞬間 |
| 典型的な用途 | 日付のバリデーション・他コントロールとの連動・表示内容の更新など |
ユーザーが手入力で変更しても、カレンダー操作で変更しても発生するため、
最も信頼性の高い日付変更イベントです。
基本的な使い方
フォームデザイナで DateTimePicker を選び、
プロパティウィンドウ → イベント → ValueChanged をダブルクリックすると
イベントハンドラが自動生成されます。
最小限の使用例
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
DateTime selected = dateTimePicker1.Value;
label1.Text = $"選択した日付: {selected:yyyy/MM/dd}";
}
これだけで、ユーザーが日付を変えるたびにラベルへ反映されます。
よくある実務的な利用例
① 期間選択(開始日 → 終了日)に利用
開始日を変更したら、終了日の最小値を動的に変更するパターンです。
private void startDatePicker_ValueChanged(object sender, EventArgs e)
{
endDatePicker.MinDate = startDatePicker.Value;
}
② 日付に応じたデータ検索
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
LoadData(dateTimePicker1.Value); // 選択日付のデータを取得
}
③ 日付によって UI の状態を変える
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
var d = dateTimePicker1.Value;
if (d.DayOfWeek == DayOfWeek.Sunday)
{
labelStatus.Text = "休日です";
labelStatus.ForeColor = Color.Red;
}
else
{
labelStatus.Text = "平日です";
labelStatus.ForeColor = Color.Black;
}
}
こうした小さな UI の変化が、ユーザーの利便性を大きく向上させます。
TextChanged ではなく ValueChanged を使うべき理由
DateTimePicker には Text プロパティも存在し、TextChanged イベントも利用できますが、
信頼性は ValueChanged のほうが圧倒的に高い です。
ValueChanged が推奨される理由
- 内部的に DateTime 型で管理されるため入力のゆらぎが少ない
- カレンダー操作でも手入力でも必ず発生する
- 無効な日付が入力されない(自動補正される)
- バリデーションがしやすい
✔ 「日付の変更を観測したい」
→ いつでも ValueChanged を使う のがベスト!
→ いつでも ValueChanged を使う のがベスト!
注意点
- Value をコードから変更してもイベントが発生する
→ 自動処理のループに注意(フラグで制御するなど) - ShowUpDown = true の場合も発生する
→ カレンダーが表示されなくてもイベントは有効 - Value が MinDate/MaxDate の範囲外になると例外
→ 事前に範囲を調整すること
イベントの正しいパターン:連続変更の抑制例
自動処理により ValueChanged が無限ループするのを避けるパターンです。
private bool _updating = false;
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
if (_updating) return;
_updating = true;
// ここに処理を書く
DoSomething(dateTimePicker1.Value);
_updating = false;
}
業務アプリではほぼ必須になる設計パターンです。
まとめ
- ValueChanged は「日付が変わった瞬間」に発生する最重要イベント
- UI 変更、バリデーション、期間チェックなど実務で必須
- TextChanged ではなく ValueChanged を使うのが鉄則
- コードによる変更でも発火する点に注意
DateTimePicker を使ったフォームでは、
ほぼ必ず登場するのがこの ValueChanged イベントです。
正しく扱うことで、ユーザーにとって快適でミスのない UI を作成できます。
ぜひ実務でも積極的に活用してみてくださいね。
Please follow and like us:

コメント