DateTimePickerで日付の判定

C#でDateTimePickerで選択された日付が適切じゃなかったら変更前の日付へ戻す処理をしたくて、以下のように書いた。

// ValueChangedイベントで処理
private void dtStart_ValueChanged(object sender, EventArgs e)
{
    DateTimePicker dtp = (DateTimePicker)sender;
    try
    {
        this.Period.StartDay = dtp.Value; // 適切じゃないと例外が発生
    }
    catch (Exception ex) 
    {
        MessageBox.Show(ex.Message);
        dtp.Value = this.Period.StartDay; //ここで再びイベント発生。あたりまえか。。。
    }
}

このやり方だと値を戻した時に再度ValueChangedイベントが発生する。
他にイベントないんだろうかと探したら、こういう場合ってCloseUpイベント使うのな。知らなかったよ。

参考:Validating the Date in a Date Time Picker Control

以下のように書き換えてOK

private void dtStart_CloseUp(object sender, EventArgs e)
{
    DateTimePicker dtp = (DateTimePicker)sender;
    try
    {
        this.Period.StartDay = dtp.Value; // 適切じゃないと例外
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
        dtp.Value = this.Period.StartDay;
    }
}