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

C# 从其他表单(VSTO)更新Outlook功能区标签,c#,outlook,vsto,outlook-addin,C#,Outlook,Vsto,Outlook Addin,我觉得自己完全没办法弄明白这一点,因为我知道我错过了一些简单的事情。无论如何,我有一个设置窗体,当用户单击我为Outlook加载项创建的Outlook功能区上的“设置”按钮时,该窗体将打开。设置窗体中有一个复选框,当用户选中该复选框时,我需要更改位于功能区背面的标签的文本 我已经习惯了WPF,所以在这种情况下,通常我会调用一个调度程序,因为表单位于不同的线程上,但是整个调度程序似乎完全脱离了VSTO。我错过了什么?Windows窗体的解决方案似乎也不起作用 下面是我正在尝试做的一个例子。此代码将

我觉得自己完全没办法弄明白这一点,因为我知道我错过了一些简单的事情。无论如何,我有一个设置窗体,当用户单击我为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";
      }
}

我知道在这个示例中,我正在创建一个ribbon的新实例,这就是为什么我没有看到标签更新,但我真的不知道从这里可以走到哪里。感谢您的帮助。

Ribbon从诞生起就是一个静态的东西。不能直接设置属性。相反,您需要使用回调来更新控件。当需要更新控件的状态时,需要调用接口的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
XML标记文件中的
:
在守则中:
伊里布努伊的暗米里布翁
子MyAddInInitialize(功能区作为IRibbonUI)
设置MyRibbon=Ribbon
端接头
子函数()
MyRibbon.Invalidate()'使所有外接程序控件的缓存无效
端接头

从何处创建调用设置表单?功能区是否正确?是,请使用“settingsForm.show();”你能改用showdialog吗?