2017-06-21 167 views
1

我有問題弄清楚爲什麼我不能在InitializeWizard操縱任務複選框,但我可以CurPageChangedInno Setup:如何在InitializeWizard中使用WizardForm.TasksList.Items?

[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; 

我不能在InitializeWizard使用WizardForm.TasksList.Items?我希望能夠撥打WizardForm.TasksList.Checked[Index] := False;或可能禁用它,但我寧願在初始化時執行它,而不必避免調用代碼,如果用戶點擊後退按鈕並返回到wpSelectTasks

回答

0

由於任務列表根據所選組件填充。

因此,任務列表在InitializeWizard還未知。任何列表根據選定的組件(重新)生成,只要輸入wpSelectTasks頁面。

因此,正如您已經發現的,最早的時刻,您可以使用TasksListCurPageChanged(wpSelectTasks)


當取消選中任務時,確保在用戶返回任務頁面時不取消選中它。實際上,您應該只在第一次訪問頁面時取消選中它。