【问题标题】:Updating an Outlook ribbon label from another form (VSTO)从另一个表单更新 Outlook 功能区标签 (VSTO)
【发布时间】:2015-02-01 18:24:02
【问题描述】:

我因为无法弄清楚这一点而感到完全愚蠢,因为我知道我错过了一些简单的东西。无论如何,当用户单击我为 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";
      }
}

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

【问题讨论】:

  • 您从哪里创建调用设置表单?丝带正确吗?
  • 是的,使用 'settingsForm.show();'
  • 你能用 showdialog 代替吗?

标签: c# outlook vsto outlook-addin


【解决方案1】:

Ribbon 从诞生之日起就是一个静态的东西。您不能直接设置属性。相反,您需要使用回调来更新控件。当您需要更新控件的状态时,您需要调用 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

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多