5

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

Format = 'MMM-yyyy'
DateMode = dmUpDown

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

是什么导致了这个问题?

4

1 回答 1

14

问题是日期时间选择器控件正在使用当前日期进行初始化。这包括在几个月内无效的一个月中的一天。

因此,为了清楚起见,您是在 2013 年 1 月 29 日问这个问题。当您单击上/下控件移动到二月时,该控件无法执行更改,因为 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 回答