You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Inno Setup如何修改自定义选项页中已有单选按钮的标题

嗨Klaus,完全不用费劲从头创建自定义页面!Inno Setup早就给咱们留好了直接修改已创建控件标题的方法,几步就能实现你要的效果~

核心思路:复用已创建的单选按钮,动态修改标题

你只需要先把要修改的单选按钮“标记”出来(给它起个名字或者保存控件引用),然后在用户完成输入后,触发代码更新它的标题就好。

步骤1:给单选按钮设置标识(保存引用或命名)

在你创建选项页的代码里,别光创建单选按钮,把它赋值给一个全局变量,或者给它设置Name属性,这样后续代码能找到它。比如:

var
  // 声明全局变量,用来保存单选按钮和输入框的引用
  CustomRadioBtn: TRadioButton;
  InputEdit: TEdit;
  MyOptionPage: TWizardPage;

procedure InitializeWizard;
var
  InputPage: TWizardPage;
begin
  // 先创建输入页,保存输入框引用
  InputPage := CreateInputQueryPage(wpWelcome,
    '输入编号', '请输入你的编号',
    '请输入格式如100-701的编号:');
  InputEdit := InputPage.Add('编号:', False);

  // 创建选项页和单选按钮
  MyOptionPage := CreateCustomPage(wpWelcome, '选择类型', '请选择安装类型');
  
  CustomRadioBtn := TRadioButton.Create(MyOptionPage.Surface);
  CustomRadioBtn.Parent := MyOptionPage.Surface;
  CustomRadioBtn.Top := 10;
  CustomRadioBtn.Left := 10;
  CustomRadioBtn.Caption := '自定义(待修改)'; // 初始标题
  CustomRadioBtn.Checked := True; // 默认选中

  // 再创建Standard单选按钮
  with TRadioButton.Create(MyOptionPage.Surface) do
  begin
    Parent := MyOptionPage.Surface;
    Top := CustomRadioBtn.Top + CustomRadioBtn.Height + 8;
    Left := 10;
    Caption := 'Standard';
  end;
end;

步骤2:在合适的时机更新标题

当用户输入完内容并切换到选项页时,我们就可以更新单选按钮的标题了。用CurPageChanged事件最合适——每次页面切换都会触发这个事件,我们只需要判断当前是不是选项页就行:

procedure CurPageChanged(CurPageID: Integer);
var
  UserInput: String;
begin
  // 先拿到用户输入的内容
  UserInput := Trim(InputEdit.Text);
  
  // 判断当前页面是不是我们的选项页
  if CurPageID = MyOptionPage.ID then
  begin
    if UserInput <> '' then
      // 直接修改单选按钮的Caption属性,Inno Setup会自动处理选中时的(*)标记
      CustomRadioBtn.Caption := UserInput
    else
      // 如果用户没输入,恢复初始标题
      CustomRadioBtn.Caption := '自定义(待修改)';
  end;
end;

补充:如果没保存控件引用怎么办?

要是你之前没给单选按钮设置全局变量,也可以通过控件的Name属性来查找它:

// 记得在创建单选按钮时加上这一行:CustomRadioBtn.Name := 'MyCustomRadio';
procedure CurPageChanged(CurPageID: Integer);
var
  TargetRadioBtn: TRadioButton;
  UserInput: String;
begin
  UserInput := Trim(InputEdit.Text);
  if CurPageID = MyOptionPage.ID then
  begin
    // 通过Name查找控件
    TargetRadioBtn := TRadioButton(WizardForm.FindControl('MyCustomRadio'));
    if Assigned(TargetRadioBtn) and (UserInput <> '') then
      TargetRadioBtn.Caption := UserInput;
  end;
end;

最后说明

这样修改后,当用户输入100-701并切换到选项页时,选中的单选按钮就会显示(*) 100-701,未选中时是( ) 100-701,和Standard的显示风格完全一致,完全不用重新做页面~

内容的提问来源于stack exchange,提问作者gromit72

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:21:27