我在具有以下属性的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单元中。

关于delphi - 为什么TDateTimePicker不让我浏览到2月?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14583598/

10-11 20:35