由于我的第一个问题实例太宽泛,我将尝试重新编写,以便更容易理解。
我希望能够根据要检查的复选框列表中的项目更改标签的可见性。我有一个循环,通过我的复选框列表。
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;
我遇到的问题是,我可以一次只激活一个标签,也可以在取消选择标签时不会消失。
我希望我对此进行了重写,使其不像上一个问题那样广泛。
答案 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]);