从维克斯自定义动作设置编辑控件文本值(Set edit control text value fro

2019-10-19 10:18发布

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

我可以填充“组合框”控制,但我不能找到一种方法来改变“编辑”控制值。

Answer 1:

如果你正在处理一个文件浏览器对话框或文件夹的浏览器对话框(工作会为你的情况也一样),执行自定义操作后发布更改的属性。 最好的,如果你调用自定义操作之前复位。 见下面的例子

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


Answer 2:

以及由Nilaksha佩雷拉的建议连接的属性,我的做法是移动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;
    }
}


Answer 3:

Control单元有一个Property的属性。 这个属性保存属性,它定义了控件的值,你的情况,编辑控件的名称。 当您更改此链接属性的值时,控制开始显示这种新的价值。

然而,对话框“刷新”,才能使更改变得可见。 只要Windows安装程序的用户界面是非常有限的,不公开的大各种各样的事件,你应该把它周围莫名其妙。

举例来说,假设你需要在编辑器更改值时,它被放置在对话框只是加载。 您可以通过以下方式实现这一目标:在先前的对话框,指定DoAction上的事件Next按一下按钮,并运行此事件自定义操作。 因此,当被加载的下一个对话框编辑控件将显示所期望的值。

附注:它可能会证明,你并不需要一个C#自定义操作-在SetProperty可能就足够了。 如果是这样的情况下,尽可能使用它。



文章来源: Set edit control text value from custom action with WIX