Delphi 为什么赢了';TDateTimePicker能让我导航到二月吗?

Delphi 为什么赢了';TDateTimePicker能让我导航到二月吗?,delphi,datetimepicker,Delphi,Datetimepicker,我正在D7应用程序上使用具有以下属性的TDateTimePicker: Format = 'MMM-yyyy' DateMode = dmUpDown 当我尝试使用dt1.DateTime:=Now为其设置当前日期时间时,它会正确设置时间和日期,但在尝试导航月份时会显示异常。特别是,我不能在三月份以下传阅 导致此问题的原因是什么?问题是日期时间选择器控件正在使用当前日期初始化。这包括一个月中的某一天,它在几个月内是无效的 所以,我想说清楚,你是在2013年1月29日问这个问题的。当您单击向上/

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

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


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

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

所以,我想说清楚,你是在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);

startothemonth
helper函数位于
DateUtils
单元中。

为什么使用这种格式?在一个日期时间选择器中,我也希望能够选择一天。否则,可能两个正常的下拉列表也同样容易。@GolezTrol:这是一个维护代码。我无法更改此格式。@致所有人:我进行了一些调试,发现日期的值没有更改。所以在2月份,日期仍然是29。这就是例外。但是,我该怎么做才能防止这种情况?