【发布时间】:2015-12-21 03:54:18
【问题描述】:
我已将标准 VCL TDateTimePicker - MaxDate 属性设置为 Date - 例如
DTPicker.MaxDate := Date;
但是,有一个问题。如果我现在将日期设置为当前日期:
DTPicker.Date := Date;
它不会接受它。控件只是停留在设计时设置的日期。我可以通过将 MaxDate 设置为 Date + 1 来解决它,然后设置 Date 属性可以正常工作并显示今天的日期,但随后用户可以选择明天的日期。我还尝试将MaxDate 设置为Date + 0.99999999,但这也无济于事。
我使用 Delphi 2010 和 C++Builder 2010(如果这是其中任何一个的错误)。
任何想法如何防止选择今天之后的任何日期并将控制日期设置为今天的日期?
更改日期会导致 - “无法设置日历日期或时间。”
更新:
我设法使它工作如下:
- 在 TDateTimePicker 中打开下拉菜单(在运行时)并有意选择今天的日期(单击已选择的今天日期)
- 之后选择任何过去的日期
- 点击按钮,里面有重置日期的代码,然后就可以工作了。
我的解决方案可能是在关闭表单之前使用范围检查,因为MaxDate 似乎没用,至少在这个版本的 Delphi 中是这样。
【问题讨论】:
-
TDateTimePicker 的开始日期是组件创建的日期+时间。当您在运行时选择另一个日期时,它只会更改日期部分。您不能选择今天,因为组件的时间部分会使整个值 在 MaxDate 之后。将 MaxDate 设置为 (Tomorrow - 1ms) 或将选取器的初始日期设置为不包括时间部分。
-
MaxDate 为 Today 时不能进入 Today,MaxDate 为 Tomorrow 时可以进入 Tomorrow,这听起来有点奇怪。顺便说一句,我刚刚在 Windows 7 上的 D2010 中对其进行了测试,一切都按预期工作。所以它不太可能是 D2010 中的错误。
-
D2010 肯定有问题。我设法使它工作。这是如何 - 启动程序。有意选择今天的日期。然后选择任何其他日期。然后单击按钮 - 然后相同的代码工作。
标签: delphi date datepicker c++builder tdatetimepicker