我在解决为什么我无法在InitializeWizard
期间操纵任务复选框时遇到问题,但我可以使用CurPageChanged
:
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"
Name: "Option1"; Description: "Option1"
[Code]
procedure CurPageChanged(CurPageID: Integer);
var Index: Integer;
begin
if CurPageID = wpSelectTasks then
begin
Index := WizardForm.TasksList.Items.IndexOf('Option1');
if Index <> -1 then
MsgBox('Touch device checkbox found.', mbInformation, MB_OK); { THIS WORKS!! }
end;
end;
procedure InitializeWizard();
var Index: Integer;
begin
Index := WizardForm.TasksList.Items.IndexOf('Option1');
if Index <> -1 then
MsgBox('Touch device checkbox found.', mbInformation, MB_OK); { THIS DOES NOT WORK }
end;
我可以在WizardForm.TasksList.Items
中使用InitializeWizard
吗?我希望能够调用WizardForm.TasksList.Checked[Index] := False;
或者可能禁用它,但我宁愿在初始化时执行它而不必避免调用代码,如果用户点击后退按钮并返回wpSelectTasks
。
答案 0 :(得分:1)
因为任务列表是根据所选组件填充的。
因此,InitializeWizard
中尚未知道任务列表。每当输入wpSelectTasks
页面时,都会根据选择的组件(重新)生成任务列表。
因此,正如您发现的那样,最早的时刻,您可以使用TasksList
CurPageChanged(wpSelectTasks)
。
取消选中任务时,请确保在用户返回任务页面时不取消选中该任务。实际上,你应该在第一次访问页面时取消选中它。