[C#]DateTimePickerは、CloseUpイベントで日付変更を取得する

投稿日:

日付関連で、取得した値がどうか?ってのを検出して判定する必要が出たのでメモ。

CloseUpイベントで何が判定されるのか?

https://msdn.microsoft.com/ja-jp/library/system.windows.forms.datetimepicker.closeup(v=vs.110).aspx

ドロップダウン形式の予定表が閉じられた場合や、非表示になった場合に発生します。

ということで、手動で変更した時ではなく、カレンダーのリストから日付を選択したりした場合にイベントが発生してくれる。

ValueChangeイベントじゃ駄目なのか?

ValueChangeイベントでも値の変更自体は取得可能。
なので、これで問題なさそうなんだけど、日付の判定を行う場合、少し厄介になってくる。

一応、こんな感じで書けるんだけど

1
2
3
4
5
6
7
8
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
    DateTime getDate;
    if(DateTime.TryParse(dateTimePicker1.Value.toString(), getDate))
    {
        getDate.Value = DateTime.Now;
    }
}

エラー処理はさておき、TryParseで日付型として取得不可能な値が設定されていた場合に、別の日付を設定する。
と、再度ValueChangeイベントが発生してしまう。

これは、try-catch でエラー処理をかまして対応しても同じ。
まぁ、ValueChangeイベントで正しく扱える値をセットしたりするので、2回目のValueChangeイベントで問題は発生しないんだけど、一々やりづらい。

CloseUpイベントで日付の変更を取得する

1
2
3
4
5
6
7
8
private void dateTimePicker1_CloseUp(object sender, EventArgs e)
{
    DateTime getDate;
    if(DateTime.TryParse(dateTimePicker1.Value.toString(), getDate))
    {
        getDate.Value = DateTime.Now;
    }
}

こんな感じで書く。
といっても、イベント名をValueChangeからCloseUpへ変更したぐらい。

手で書きたくない場合は、プロパティのダブルクリックで

フォームにDateTimePickerコントロールを貼り付ける

プロパティウィンドウのタブをプロパティから、イベントに変更

CloseUpをダブルクリック


1
2
3
4
private void dateTimePicker1_CloseUp(object sender, EventArgs e)
{
//ここに処理
}

こんな感じで勝手に挿入してくれるので、必要な処理を書き込む。







-C#, 開発メモ
-,

関連記事

C#でTryParseメソッドを使って文字列が数値かどうかを確認する

C#に限らず、コーディングしていると数値が欲しいのに、引数がstring型とかいう状況がよくあるわけで。 判定方法はいろいろあるけど、TryParseを使うと簡単だった。 TryParseって何するの …

[VMWare Fusion]VMWare Fusion 12を導入した話

  日本の中心付近で仕様変更と闘うSE日記  1 Pocket[VMWare Fusion]VMWare Fusion 11がBigSurで使えなかった話。http://ht-jp …

ダイナミックディスクのクローン作成に失敗したから、結局、OSのクリーンインストールをせざるを得なかった。

SSDへの移行失敗しました。 無料で使えるEaseUS Todo BackUp のフリー版を使ったけど、クローンが作成できなかった・・・ コピー後、起動しようとしても、お馴染みのOSディスクが無いぜ? …

[C#]TextBoxで、マウスクリック(1回目)だけ、内容を全選択させる

TextBoxの内容を全選択させるには、SelectAll()を使用 マウスの1回目も含めるなら、BeginInvoke~を使用 VB.net版はこちら。 日本の中心付近で仕様変更と闘うSE日記[VB …

ORACLEでORA-01861: リテラルが書式文字列と一致しません

ORA-01861: リテラルが書式文字列と一致しません このエラー、ぶっちゃけ、意味が分からないところでもある。 日付の指定時に発生してて、原因が判明するまでに結構回り道をしました。 ネットで検索し …


カテゴリー

S