delphi - 为什么 TDateTimePicker 不允许我导航到二月?

标签 delphi datetimepicker

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

Format = 'MMM-yyyy'
DateMode = dmUpDown

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

是什么导致了这个问题?

最佳答案

问题在于日期时间选择器控件正在使用当前日期进行初始化。其中包括该月中某些月份无效的某一天。

所以,需要明确的是,您在 2013 年 1 月 29 日问这个问题。当您单击向上/向下控件移至二月时,该控件无法执行更改,因为 2013 年没有 2 月 29 日.

对于任何发现难以重现的 future 访问者,这是您需要演示该问题的代码:

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 不允许我导航到二月?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14583598/

相关文章:

javascript - 使用 moment javascript 和 DateTimePicker 的日期无效

android - Delphi 10.3.1 - Android 服务在 System.InitUnits 上挂起

windows - 第三方代码正在修改 FPU 控制字

delphi - 初始化磁盘时拒绝访问

Jquery datetimepicker - 将时间提前 1 小时

javascript - 为什么 Firefox 不遵守标准的 javascript 支持元素测试

web-services - 使用Delphi 2007将Base64字符串作为二进制文件保存到磁盘

delphi - 在TComboBox中,如何使下拉菜单显示X,但是选择X时text属性变为Y?

javascript - 日期时间范围指令字段未显示任何值

C#:DateTimePicker 在使用自定义格式的低宽度程序启动时有下拉显示错误。是什么原因造成的?