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

投稿日:

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

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

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

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

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

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

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

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

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イベントで日付の変更を取得する

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をダブルクリック


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

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







-C#, 開発メモ
-,

関連記事

先日のデグレに引き続き、作業を一個抜かしたら、超絶怒られて始末書書かされた件

タイトルの通りで、始末書書かされました。 社内での信用0です。 先日のデグレの時もでしたが、今日も思いっきり怒られましたよ。 電話越しの無言は怖い。 日本の中心付近で仕様変更と闘うSE日記  …

TortiseSVNなんだけど、自分が原因で「already locked」が出てしまった時の対処法。自分がロックを取ってて、ロックが取れずコミットが出来ない事態に遭遇した・・・

SVNを使っていると、たまにありますね。 ロックが既に誰かに取得されていて、コミットしようとした時に、唖然とするやつ。 ただ、今回は状況が違いました。 いつもなら、「ロック取ってるやつ誰だよ~」って感 …

[ORACLE]SQLのIN句にパラメータを適用する方法

カンマ区切りの文字列を取得した理由 こないだの続きです。 日本の中心付近で仕様変更と闘うSE日記[C#]リストをカンマ区切りの文字列で出力するhttp://ht-jp.net/blog/pc/c/c- …

[ORACLE]ORA-00918:列の定義が未確定です・・・のエラーにならなかった

なんでエラーになるものをマージしてるんだ? と、怒られました。 一瞬、理解が出来ず・・・ で、エラーを再現してもらう・・・と。 あっさり発生。 早く修正しろって突っ返されました。 頭には「?」しか浮か …

devenvを使って、プロジェクトをコマンドラインからビルドする方法[VisualStudio]

今日も今日とて休日出勤\(^o^)/   現在、C#をメイン言語として使用しています。 で、当然というか、開発の区切りだったり、テストするためにビルドというものをやります。 このビルド、プロ …


カテゴリー