从其他表单(VSTO)更新Outlook功能区标签

时间:2014-12-04 00:51:30

标签: c# outlook vsto outlook-addin

我觉得因为无法解决这个问题而感到愚蠢,因为我知道我错过了一些简单的事情。无论如何,我有一个设置表单,当用户单击我为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";
      }
}

我知道在示例中我正在创建一个新的功能区实例,这就是为什么我没有看到标签更新,但我真的不知道从哪里开始。任何帮助表示赞赏。

1 个答案:

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