我在具有以下属性的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/