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

标签 delphi date datepicker c++builder tdatetimepicker

我已将标准 VCL TDateTimePicker - MaxDate 属性设置为 Date - 例如

DTPicker.MaxDate := Date;

但是,有一个问题。如果我现在将日期设置为当前日期:

DTPicker.Date := Date;

它不会接受它。控件仅停留在设计时设置的日期。我可以通过将 MaxDate 设置为 Date + 1 来解决此问题,然后设置 Date 属性工作正常并显示今天的日期,但用户可以选择明天的日期。我还尝试将 MaxDate 设置为 Date + 0.99999999 但这也没有帮助。

我使用 Delphi 2010 和 C++Builder 2010(如果这是其中任何一个的错误)。

有什么想法可以防止选择今天之后的任何日期并将控制日期设置为今天的日期吗?

更改日期会导致 - “无法设置日历日期或时间。”

更新:

我设法使其工作如下:

  1. 在 TDateTimePicker 中打开下拉菜单(在运行时)并有意选择今天的日期(点击已选择的今天的日期)
  2. 然后选择任何过去的日期
  3. 点击包含重置日期代码的按钮即可生效。

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

最佳答案

看来是 Date 的时间部分导致了问题。这在 D2007、XE、XE8 和 Delphi 10 Seattle 上运行良好:

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 Lebeau 在评论中指出的那样:在实际应用程序中,您不会希望对时间部分进行硬编码。更好的解决方案是使用 DateUtils.EndOfDay(Date)Trunc(Date) + EncodeTime(23, 59, 59, 999)

关于delphi - TDateTimePicker MaxDate - 不允许将控件设置为当前日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32746206/

相关文章:

delphi - Delphi XE 中使用 Indy IdHttp Digest 身份验证的 401

javascript - 如何在 D3.JS 或 moment 中解析像 '2009-09-13' 这样的日期

javascript - 添加日期选择器以过滤数据表中的数据

multithreading - Delphi 2009 等待链遍历在 Windows 7 安装中可用吗?

delphi - 我可以将 Delphi TEdit(或类似的)简单地连接到类的已发布属性吗?

python - 按日期对列表的 python 字典进行排序

excel - 日期时间转换

c# - jQuery 日期选择器中的日期模型

javascript - 使用按钮在 Jquery Datepicker 上设置日期

Delphi控件可以模仿Firefox的 "Add-ons|Extension list"吗?