检查CheckListBox中检查的项目

时间:2015-12-10 12:38:29

标签: delphi

由于我的第一个问题实例太宽泛,我将尝试重新编写,以便更容易理解。

我希望能够根据要检查的复选框列表中的项目更改标签的可见性。我有一个循环,通过我的复选框列表。

procedure TFrmSettings.CheckBoxSelected;
var
i : Integer;
begin
for i := 0 to CblRequiredFields.Items.Count - 1 do
 begin
 if CblRequiredFields.Checked[i] then
  begin
  FrmVReg.ReqFields(CblRequiredFields.Items.Strings[i]);
  end;
 end;
end;

这只是ReqFields程序的一部分,因为这个问题太长了。

procedure TFrmVReg.ReqFields(ChkStr : String);
begin
if ChkStr = 'Gender' then
 begin
 lblGenderReq.Visible := True;
 end
else
 begin
 lblGenderReq.Visible := False;
 end;

我遇到的问题是,我可以一次只激活一个标签,也可以在取消选择标签时不会消失。

我希望我对此进行了重写,使其不像上一个问题那样广泛。

1 个答案:

答案 0 :(得分:0)

如果在创建FrmVReg之前存在FrmSettings表单,则可以直接在CblRequiredFields列表中维护一对键值对(checbox名称和标签对象)。 / p>

可以使用CblRequiredFields对象的OnClickCheck事件将标签可见性与TCheckListBox检查同步。

procedure TFrmSettings.CblRequiredFieldsClickCheck(Sender: TObject);
begin
  TLabel(CblRequiredFields.Items.Objects[CblRequiredFields.ItemIndex]).Visible := CblRequiredFields.Checked[CblRequiredFields.ItemIndex];
end;

procedure TFrmSettings.FormCreate(Sender: TObject);
begin
  CblRequiredFields.AddItem('Gender', FrmVReg.lblGenderReq);
  CblRequiredFields.AddItem('Age', FrmVReg.lblAgeReq);
  . . .
end;

如果无法应用上述内容,您可以像这样修改ReqFields方法:

procedure TFrmVReg.ReqFields(ChkStr: String; Checked: Boolean);
begin
   if ChkStr = 'Gender' then
     lblGenderReq.Visible := Checked
   else if ChkStr = 'Age' then
     lblAgeReq.Visible := Checked
   //else if . . .
end;

...用新的签名相应地调用它:

for i := 0 to CblRequiredFields.Items.Count - 1 do
  FrmVReg.ReqFields(CblRequiredFields.Items.Strings[i], CblRequiredFields.Checked[i]);