在 DateTimePicker 中选择两 (2) 个日期触发启用按钮
Trigger enable TButton with the pick of two (2) dates in TDateTimePickers
我设置了 TButton "not enabled",当两个日期都被选中时,应该由两 (2) 个 TDateTimePickers 启用它。
我的 TDateTimePicker 日期默认为 now() 日期。因此,在 OnChange,我创建了以下代码,但我无法正确使用:
procedure TfrmPayroll.EnableButton; //my created procedure
begin
if (dtpFrom.Date = Now()) and
(dtpTo.Date = Now()) then
begin
btnOpen.Enabled := False;
end
else
begin
btnOpen.Enabled := True;
end;
结果是启用了 TButton,即使我只选择了我设置的 2 个条件中的一个日期。
你可以简单地写:
procedure TfrmPayroll.EnableButton; //my created procedure
begin
btnOpen.Enabled := (dtpFrom.Date <> Now()) and (dtpTo.Date <> Now());
end;
您的代码需要 both DTP 设置为 Now
才能禁用 Button,而不是 either DTP Now
.
要修复现有代码,请使用 or
运算符而不是 and
运算符:
procedure TfrmPayroll.EnableButton;
begin
if (dtpFrom.Date = Now()) or
(dtpTo.Date = Now()) then
begin
btnOpen.Enabled := False;
end else begin
btnOpen.Enabled := True;
end;
end;
如果您重写条件以使用 <>
运算符而不是 =
运算符,则可以简化:
procedure TfrmPayroll.EnableButton;
begin
btnOpen.Enabled := (dtpFrom.Date <> Now()) and (dtpTo.Date <> Now());
end;
仅供参考,您应该使用 Date()
而不是 Now()
,因为 TDateTimePicker.Date
属性 不应该包含时间,但 Now()
包含时间.如果本地时钟在两次 Date()
调用之间更改日期,您应该使用局部变量来避免竞争条件:
uses
..., DateUtils;
procedure TfrmPayroll.EnableButton;
var
CurrentDate: TDate;
begin
CurrentDate := Date();
btnOpen.Enabled := (DateOf(dtpFrom.Date) <> CurrentDate) and (DateOf(dtpTo.Date) <> CurrentDate);
end;
我设置了 TButton "not enabled",当两个日期都被选中时,应该由两 (2) 个 TDateTimePickers 启用它。
我的 TDateTimePicker 日期默认为 now() 日期。因此,在 OnChange,我创建了以下代码,但我无法正确使用:
procedure TfrmPayroll.EnableButton; //my created procedure
begin
if (dtpFrom.Date = Now()) and
(dtpTo.Date = Now()) then
begin
btnOpen.Enabled := False;
end
else
begin
btnOpen.Enabled := True;
end;
结果是启用了 TButton,即使我只选择了我设置的 2 个条件中的一个日期。
你可以简单地写:
procedure TfrmPayroll.EnableButton; //my created procedure
begin
btnOpen.Enabled := (dtpFrom.Date <> Now()) and (dtpTo.Date <> Now());
end;
您的代码需要 both DTP 设置为 Now
才能禁用 Button,而不是 either DTP Now
.
要修复现有代码,请使用 or
运算符而不是 and
运算符:
procedure TfrmPayroll.EnableButton;
begin
if (dtpFrom.Date = Now()) or
(dtpTo.Date = Now()) then
begin
btnOpen.Enabled := False;
end else begin
btnOpen.Enabled := True;
end;
end;
如果您重写条件以使用 <>
运算符而不是 =
运算符,则可以简化:
procedure TfrmPayroll.EnableButton;
begin
btnOpen.Enabled := (dtpFrom.Date <> Now()) and (dtpTo.Date <> Now());
end;
仅供参考,您应该使用 Date()
而不是 Now()
,因为 TDateTimePicker.Date
属性 不应该包含时间,但 Now()
包含时间.如果本地时钟在两次 Date()
调用之间更改日期,您应该使用局部变量来避免竞争条件:
uses
..., DateUtils;
procedure TfrmPayroll.EnableButton;
var
CurrentDate: TDate;
begin
CurrentDate := Date();
btnOpen.Enabled := (DateOf(dtpFrom.Date) <> CurrentDate) and (DateOf(dtpTo.Date) <> CurrentDate);
end;