首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TDateTimePicker MaxDate -不允许将控件设置为当前日期

TDateTimePicker MaxDate -不允许将控件设置为当前日期
EN

Stack Overflow用户
提问于 2015-09-23 17:47:52
回答 2查看 2.5K关注 0票数 2

我已经将标准的VCL TDateTimePicker - MaxDate属性设置为Date

代码语言:javascript
复制
DTPicker.MaxDate := Date;

然而,存在一个问题。如果我现在将日期设置为当前日期:

代码语言:javascript
复制
DTPicker.Date := Date;

它不会接受的。控件只是停留在设计时设置的日期。我可以通过将MaxDate设置为Date + 1,然后设置Date属性可以很好地显示今天的日期来解决这个问题,但是用户可以选择明天的日期。我还试图将MaxDate设置为Date + 0.99999999,但这也没有帮助。

我使用Delphi2010和C++Builder 2010 (如果这是它们中的一个bug )。

如何防止在今天之后选择任何日期,并将控制日期设置为今天的日期?

更改日期结果为-“未能设置日历日期或时间”。

更新:

我设法使其工作如下:

  1. 在TDateTimePicker中打开下拉菜单(运行时期间),并有意选择“今日日期”(单击已选定的“今日日期”)
  2. 在此之后选择过去的日期。
  3. 单击按钮,其中有重置日期的代码,然后它工作。

我的解决方案可能是在关闭表单之前使用范围检查,因为看起来MaxDate是无用的,至少在这个版本的Delphi中是这样的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-23 18:01:44

似乎是Date的时间部分导致了问题。这在D2007、XE、XE8和Delphi10西雅图都很好:

代码语言:javascript
复制
DateTimePicker1.MaxDate := Trunc(Date) + 0.99999999999;
DateTimePicker1.Date := Date;

使用全新的VCL窗体应用程序进行测试。在表单上放置一个TDateTimePicker和一个TButton,并为表单的FormCreate生成一个事件:

代码语言:javascript
复制
procedure TForm1.FormCreate(Sender: TObject);
begin
  DateTimePicker1.MaxDate := Trunc(Date) + 0.99999999999;
end;

还有按钮:

代码语言:javascript
复制
procedure TForm1.Button1Click(Sender: TObject);
begin
  DateTimePicker1.Date := Date;
end;

运行应用程序,单击DateTimePicker组合框显示日历,并选择任何可用的日期。DateTimePicker显示所选日期。单击该按钮,DateTimePicker更新将显示今天的日期。放下日历再次显示正确的可用日期。

当然,正如Remy在评论中指出的那样:在实际应用程序中,您不希望对时间部分进行硬编码。更好的解决方案是使用DateUtils.EndOfDay(Date)Trunc(Date) + EncodeTime(23, 59, 59, 999)

票数 3
EN

Stack Overflow用户

发布于 2015-09-23 18:13:08

添加1和0.99999并没有太大的区别,因为1会在某一天增加到日期,而0.999999则几乎是一天(大约23:59:59:xxx)。

尝试以下操作(必须在“使用”列表中包括DateUtils ):

代码语言:javascript
复制
DTPicker.MaxDate := IncSecond(Date);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32746206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档