如何从C#自定义操作更改“编辑”<Control />
的文本值?
我可以填充“组合框”控件但我找不到更改“编辑”控件值的方法。
答案 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
可能就足够了。如果是这种情况,请尽可能使用它。