5

次のプロパティを持つ D7 アプリで TDateTimePicker を使用しています。

Format = 'MMM-yyyy'
DateMode = dmUpDown

を使用して現在の日時を設定しようとするとdt1.DateTime := Now、時刻と日付が正しく設定されますが、月をナビゲートしようとすると例外が表示されます。特に3月以降は流通できません。

この問題の原因は何ですか?

4

1 に答える 1

14

問題は、日時ピッカー コントロールが現在の日付で初期化されていることです。また、月によっては無効な日も含まれます。

明確にするために、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にあります。

于 2013-01-29T13:25:49.287 に答える