【问题标题】:Why won't TDateTimePicker let me navigate to February?为什么 TDateTimePicker 不让我导航到二月?
【发布时间】:2013-01-29 13:04:20
【问题描述】:

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

Format = 'MMM-yyyy'
DateMode = dmUpDown

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

是什么导致了这个问题?

【问题讨论】:

  • 为什么是这种格式?在日期时间选择器中,我希望也能够选择一天。否则,也许两个正常的下拉菜单同样容易。
  • @GolezTrol :这是一个维护代码。我无法更改此格式。
  • @to all :我做了一些调试,我发现 date 的值没有改变。所以在 2 月,日期仍然是 29。因此例外。但是,我该怎么做才能防止这种情况发生?

标签: delphi datetimepicker


【解决方案1】:

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

所以,为了清楚起见,您是在 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 单元中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多