我在我的 D7 应用程序上使用 TDateTimePicker 具有以下属性:
Format = 'MMM-yyyy'
DateMode = dmUpDown
当我尝试使用 为其设置当前日期时间时dt1.DateTime := Now
,它会正确设置时间和日期,但当我尝试导航月份时会显示异常。特别是,我不能在三月以下流通。
是什么导致了这个问题?
我在我的 D7 应用程序上使用 TDateTimePicker 具有以下属性:
Format = 'MMM-yyyy'
DateMode = dmUpDown
当我尝试使用 为其设置当前日期时间时dt1.DateTime := Now
,它会正确设置时间和日期,但当我尝试导航月份时会显示异常。特别是,我不能在三月以下流通。
是什么导致了这个问题?
问题是日期时间选择器控件正在使用当前日期进行初始化。这包括在几个月内无效的一个月中的一天。
因此,为了清楚起见,您是在 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
中。