【问题标题】:How can my program react to changes in a TDateTimePicker?我的程序如何对 TDateTimePicker 中的更改做出反应?
【发布时间】:2012-02-16 11:06:54
【问题描述】:

我想知道当用户从 TDateTimePicker 组件中选择特定日期时如何更改标签的标题。

比如说: 如果 TDateTimePicker 组件上标记了 06/02/2012,则 label1 的标题将变为“Hello World”,否则如果是任何其他日期,则不会发生任何事情。

【问题讨论】:

    标签: delphi delphi-2010 datetimepicker


    【解决方案1】:

    您需要为日期时间选择器编写一个OnChange 事件处理程序。您还需要确保在表单首次显示时运行此事件处理程序:

    procedure TForm1.UpdateDateTimeLabel;
    var
      SelectedDate, SpecialDate: TDateTime;
    begin
      SelectedDate := DateTimePicker1.DateTime;
      SpecialDate := EncodeDate(2012, 2, 16);
      if IsSameDay(SelectedDate, SpecialDate) then
        Label1.Caption := 'Hello World'
      else
        Label1.Caption := '';
    end;
    
    procedure TForm1.DateTimePicker1Change(Sender: TObject);
    begin
      UpdateDateTimeLabel;
    end;
    
    procedure TForm1.FormShow(Sender: TObject);
    begin
      UpdateDateTimeLabel;
    end;
    

    【讨论】:

    • 这只是为了让我可以比较一个日期。它从 TDateTime 变量中删除时间部分。可能有一种更清洁的方法,但我对 delphi 日期时间例程一无所知。
    • 好的,有一个使用来自 DateUtils 单元的 IsSameDay 的更简洁的版本。
    • StrToDate 取决于 ShortDateFormatDateSeparator。你最好使用EncodeDate(2012, 2, 16)
    • @kobik 谢谢。我的借口是这段代码是一个紧急事件!我现在已经按照您的建议进行了更改。
    • @DavidHeffernan:您也可以使用ReplaceTime() 将时间部分设置为0,这实际上与Floor() 剥离它相同。
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多