次のプロパティを持つ D7 アプリで TDateTimePicker を使用しています。
Format = 'MMM-yyyy'
DateMode = dmUpDown
を使用して現在の日時を設定しようとするとdt1.DateTime := Now
、時刻と日付が正しく設定されますが、月をナビゲートしようとすると例外が表示されます。特に3月以降は流通できません。
この問題の原因は何ですか?
次のプロパティを持つ D7 アプリで TDateTimePicker を使用しています。
Format = 'MMM-yyyy'
DateMode = dmUpDown
を使用して現在の日時を設定しようとするとdt1.DateTime := Now
、時刻と日付が正しく設定されますが、月をナビゲートしようとすると例外が表示されます。特に3月以降は流通できません。
この問題の原因は何ですか?
問題は、日時ピッカー コントロールが現在の日付で初期化されていることです。また、月によっては無効な日も含まれます。
明確にするために、2013 年 1 月 29 日にこの質問をしています。2 月に移動するために上下のコントロールをクリックすると、2013 年には 2 月 29 日がないため、コントロールは変更を実行できません。
再現が難しいと感じる今後の訪問者のために、これは問題を示すために必要なコードです。
DateTimePicker1.Format := 'MMM-yyyy';
DateTimePicker1.DateMode := dmUpDown;
DateTimePicker1.DateTime := EncodeDateTime(2013, 1, 29, 0, 0, 0, 0);
この問題の簡単な解決策はDateTime
、コントロールのプロパティが月初のものであることを確認することです。コントロールを初期化するときに次のコードを実行することで、これを実現できます。
DateTimePicker1.DateTime := StartOfTheMonth(DateTimePicker1.DateTime);
または、より明確にしたい場合は、次のようにします。
DateTimePicker1.DateTime := StartOfTheMonth(Date);
StartOfTheMonth
ヘルパー関数はユニットDateUtils
にあります。