使用WIX从自定义操作设置编辑控件文本值

时间:2014-02-27 15:32:48

标签: c# wix custom-action

如何从C#自定义操作更改“编辑”<Control />的文本值?

我可以填充“组合框”控件但我找不到更改“编辑”控件值的方法。

3 个答案:

答案 0 :(得分:2)

如果您正在处理文件浏览器对话框或文件夹浏览器对话框(也适用于您的案例),请在执行自定义操作后发布更改的属性。如果在调用自定义操作之前重置,则最佳。见以下示例

  <Control Id="editLocation"  Type="Edit" X="45" Y="174" Height="18" Width="220" Property="YOUR_PROPERTY" Text="[YOUR_PROPERTY]"/>
  <Control Id="btnEditLocation" Type="PushButton" X="270" Y="175" Width="56" Height="17" Text="Browse" Property="YOUR_PROPERTY">
  <Publish Event="Reset" Value="1">1</Publish>             
  <Publish Event="DoAction" Value="YOUR_CUSTOM_ACTION"><![CDATA[1]]></Publish>
  <Publish Property="YOUR_PROPERTY" Value="[YOUR_PROPERTY]"><![CDATA[1]]></Publish>
  </Control>

答案 1 :(得分:1)

除了按照Nilaksha Perera的建议链接属性之外,我的方法是将Reset操作移动到C#自定义操作。这样,我们可以选择仅在自定义操作即将成功完成时调用它。这样做的好处是不会清除编辑控件的值,除非指定了替换值。

示例自定义控件:

public static ActionResult FileBrowser(Session session)
{
    try
    {
        // Call your file browser here.

        session[VALUE] = "New value";

        session.DoAction("Reset");
        return ActionResult.Success;
    }
    catch (Exception ex)
    {
        session.Log($"Unable to launch the file browser: {ex.Message}");
        return ActionResult.Failure;
    }
}

答案 2 :(得分:0)

Control元素具有Property属性。此属性包含属性的名称,该属性定义控件的值,在您的情况下为Edit控件。当您更改此链接属性的值时,控件将开始显示此新值。

但是,对话框应“刷新”以使更改变为可见。只要Windows Installer UI非常有限且不会暴露各种各样的事件,您就应该以某种方式进行操作。

例如,假设您刚刚加载了放置对话框时需要更改编辑控件中的值。您可以通过以下方式实现此目的:在上一个对话框中,在DoAction按钮上单击指定Next事件,然后通过此事件运行自定义操作。因此,当加载下一个对话框时,编辑控件将显示所需的值。

旁注:可能会发现您不需要C#自定义操作 - SetProperty可能就足够了。如果是这种情况,请尽可能使用它。