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;
    }
}

コメント

このブログの人気の投稿

TabError: inconsistent use of tabs and spaces in indentation

ディスプレイ ドライバーの応答停止と回復

マクロを含んだ.XLSがExcel2010で開けない