我已经将标准的VCL TDateTimePicker - MaxDate属性设置为Date。
DTPicker.MaxDate := Date;然而,存在一个问题。如果我现在将日期设置为当前日期:
DTPicker.Date := Date;它不会接受的。控件只是停留在设计时设置的日期。我可以通过将MaxDate设置为Date + 1,然后设置Date属性可以很好地显示今天的日期来解决这个问题,但是用户可以选择明天的日期。我还试图将MaxDate设置为Date + 0.99999999,但这也没有帮助。
我使用Delphi2010和C++Builder 2010 (如果这是它们中的一个bug )。
如何防止在今天之后选择任何日期,并将控制日期设置为今天的日期?
更改日期结果为-“未能设置日历日期或时间”。
更新:
我设法使其工作如下:
我的解决方案可能是在关闭表单之前使用范围检查,因为看起来MaxDate是无用的,至少在这个版本的Delphi中是这样的。
发布于 2015-09-23 18:01:44
似乎是Date的时间部分导致了问题。这在D2007、XE、XE8和Delphi10西雅图都很好:
DateTimePicker1.MaxDate := Trunc(Date) + 0.99999999999;
DateTimePicker1.Date := Date;使用全新的VCL窗体应用程序进行测试。在表单上放置一个TDateTimePicker和一个TButton,并为表单的FormCreate生成一个事件:
procedure TForm1.FormCreate(Sender: TObject);
begin
DateTimePicker1.MaxDate := Trunc(Date) + 0.99999999999;
end;还有按钮:
procedure TForm1.Button1Click(Sender: TObject);
begin
DateTimePicker1.Date := Date;
end;运行应用程序,单击DateTimePicker组合框显示日历,并选择任何可用的日期。DateTimePicker显示所选日期。单击该按钮,DateTimePicker更新将显示今天的日期。放下日历再次显示正确的可用日期。
当然,正如Remy在评论中指出的那样:在实际应用程序中,您不希望对时间部分进行硬编码。更好的解决方案是使用DateUtils.EndOfDay(Date)或Trunc(Date) + EncodeTime(23, 59, 59, 999)。
发布于 2015-09-23 18:13:08
添加1和0.99999并没有太大的区别,因为1会在某一天增加到日期,而0.999999则几乎是一天(大约23:59:59:xxx)。
尝试以下操作(必须在“使用”列表中包括DateUtils ):
DTPicker.MaxDate := IncSecond(Date);https://stackoverflow.com/questions/32746206
复制相似问题