0

我的表单包含一些组件,其命名遵循简单的约定......

date1, date2, date3, date4, date5

check1, check2, check3, check4, check5

我需要能够根据日期字段的内容来确定复选框的可见性,即如果返回日期,那么复选框应该是可见的。

我正在尝试使用以下代码执行此操作,并且所有内容都可以编译,但是我未能针对组件,大概是因为它试图更改变量而不是组件。我会以完全错误的方式解决这个问题吗?

var
  dateVar : variant;
  checkVar : variant;
  x : integer;

// Set visibility of checkboxes and docs
x := 0;
dateVar := 'area.Date' + IntToStr(x);
checkVar := 'area.Check' + IntToStr(x);

for x:=1 to 5 do
  begin
    if dateVar > '00:00:00' then // Does FPC support the != or not equal to context?
       checkVar.Visibility := False
    else
       checkVar.Visibility := True;
    end;
4

1 回答 1

2

您可以通过 FindComponent 迭代组件。在下面的示例中,作为表单的自我作为所有者给出。

Procedure SetChecks(AOwner:TComponent);
var
   x:Integer;
begin
for x:=1 to 5 do
  TCheckBox(AOwner.FindComponent('check' + IntToStr(x))).Visible :=
  TDateEdit(AOwner.FindComponent('date' + IntToStr(x))).Date <>StrToDateTime('00:00:00');    
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetChecks(Self);
end;
于 2013-08-23T12:12:23.387 回答