2013-01-29 7 views
5

私は次のプロパティを持つ私のD7アプリにTDateTimePickerを使用しています:TDateTimePickerで2月に移動することができないのはなぜですか?

Format = 'MMM-yyyy' 
DateMode = dmUpDown 

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

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

+0

なぜこの形式ですか?日付の時間ピッカーでは、私は1日も選ぶことができると期待しています。それ以外の場合、2つの通常のドロップダウンも同様に簡単です。 – GolezTrol

+0

@GolezTrol:これは保守コードです。私はこのフォーマットを変更できません。 – CyprUS

+0

@ all:私はデバッグをいくつか行いました。日付の値が変更されていないことがわかりました。だからfebの月には、日付はまだ29だった。したがって、例外。しかし、私はこれを防ぐために何をしますか? – CyprUS

答えて

14

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

2013年1月29日にこの質問をしています.2月に移動するアップ/ダウンコントロールをクリックすると、2月29日にはコントロールが変更されませんそれはハード再現するために見つける任意の将来の訪問者のための2013年

、これはあなたが問題を実証する必要があるコードです:

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単位で発見されました。

関連する問題