Inno setup InnoSetup:如果未选择任何组件,请返回组件页面

Inno setup InnoSetup:如果未选择任何组件,请返回组件页面,inno-setup,Inno Setup,我试图在InnoSetup中编写一个pascal函数,要求用户在继续之前至少选择一个组件。这行得通,但似乎有点脏。还有别的办法吗 我发现绝对没有关于如何检查是否选择了任何组件的文档 我的代码如下: function NextButtonClick(PageID: Integer): Boolean; begin Result:= True; if PageID = wpSelectComponents then begin S := FmtMessage('%1', [Wizar

我试图在InnoSetup中编写一个pascal函数,要求用户在继续之前至少选择一个组件。这行得通,但似乎有点脏。还有别的办法吗

我发现绝对没有关于如何检查是否选择了任何组件的文档

我的代码如下:

function NextButtonClick(PageID: Integer): Boolean;
begin
  Result:= True;
  if PageID = wpSelectComponents then begin
    S := FmtMessage('%1', [WizardSelectedComponents(false)]);
    if S = '' then begin
      MsgBox('No items selected, please select at least one item', mbError, MB_OK);
      Result := False;
    end;
  end;
end;

你展示的方式似乎是目前可用的最短的(尽管我和你一样对此不太自信)。我能想到的唯一替代方法是迭代
组件列表
,查看是否至少有一个项将
Checked
属性返回为True:

[Code]
function IsAnyComponentSelected: Boolean;
var
  I: Integer;
begin
  Result := False;
  for I := 0 to WizardForm.ComponentsList.Items.Count - 1 do
    if WizardForm.ComponentsList.Checked[I] then
    begin
      Result := True;
      Exit;
    end;
end;

目前没有
ComponentsList
CheckedCount
like属性,也没有这类东西的任何直接函数,因此在我看来,这当然是一个可靠的替代方法,除非您使用单选按钮,其中可能总是选择一个选项。在这种情况下,您需要扩展上述代码,以确定项目的类型,并仅检查复选框类型项目的状态。

太棒了,谢谢。我最后在
NextButtonClick
中调用了
IsAnyComponentSelected
,它工作得非常完美。