我觉得因为无法解决这个问题而感到愚蠢,因为我知道我错过了一些简单的事情。无论如何,我有一个设置表单,当用户单击我为Outlook加载项创建的Outlook功能区上的设置按钮时,该表单会打开。在设置表单中有一个复选框,当用户选中该复选框时,我需要更改位于功能区上的标签文本。
我已经习惯了WPF,所以通常我会在这种情况下做的是调用一个调度程序,因为表单是在不同的线程上,但是整个调度程序的东西似乎完全用VSTO打开了窗口。我错过了什么? Windows窗体的解决方案似乎也不起作用。
这是我想要做的一个例子。此代码将弹出我的设置表单。
private void statusCheckBox_CheckedChange(object sender, eventargs e)
{
OutlookRibbon outlookRibbon = new outlookRibbon();
If(statusCheckBox.checked)
{
outlookRibbon.statusLabel.Label = "Checkbox Checked";
}
}
我知道在示例中我正在创建一个新的功能区实例,这就是为什么我没有看到标签更新,但我真的不知道从哪里开始。任何帮助表示赞赏。
答案 0 :(得分:0)
丝带从诞生开始就是一种静态的东西。您无法直接设置属性。相反,您需要使用回调来更新控件。当您需要更新控件的状态时,需要调用IRibbonUI接口的Invalidate或InvalidateControl方法以强制主机应用程序调用您的回调来获取新值。例如:
In the XML markup file:
<customUI … OnLoad=”MyAddInInitialize” …>
In the code:
Dim MyRibbon As IRibbonUI
Sub MyAddInInitialize(Ribbon As IRibbonUI)
Set MyRibbon = Ribbon
End Sub
Sub myFunction()
MyRibbon.Invalidate() ‘ Invalidates the caches of all of this add-in’s controls
End Sub