为什么TDateTimePicker不让我导航到二月?

时间:2013-01-29 13:04:20

标签: delphi datetimepicker

我在D7应用程序上使用TDateTimePicker,具有以下属性:

Format = 'MMM-yyyy'
DateMode = dmUpDown

当我尝试使用dt1.DateTime := Now设置当前日期时间时,它会正确设置时间和日期,但在我尝试导航月份时会显示异常。特别是,我不能在3月份以下流通。

导致此问题的原因是什么?

1 个答案:

答案 0 :(得分: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辅助函数。