我对Outlook对象模型中公开的IRibbonUI
接口的实现感到困惑。IRibbonUI的Outlook功能区实现
当编写Explorer或Inspector功能区的XML文件时,我们必须定义哪个方法负责将XML加载到Outlook中。
注:此代码最初不是我写的,但我一直在负责固定在至少solution..or找到原因,如预期这个东西不起作用。
不管怎么说,设置丝带方法在下面的方法定义:Ribbon_OnLoad
和ERibbon_OnLoad
Public Sub Ribbon_OnLoad(ByVal Ribbon As Office.IRibbonUI)
m_Ribbon = Ribbon
End Sub
Public Sub ERibbon_OnLoad(ByVal Ribbon As Office.IRibbonUI)
m_ERibbon = Ribbon
End Sub
现在我很困惑就是为什么在检查方法不会触发?当我遍历代码,甚至当我打开一个检查器对象时,我的全局变量m_Ribbon
有时是Nothing
,反之亦然m_ERibbon
变量。
有些时候m_ERibbon
什么都没有,并且曾经有过m_Ribbon
一直没有。我开始认为我可能深深地误解了Ribbon for Office的工作原理。
现在,当我必须通过Invalidate
方法调用回调时,它变得更加复杂。我有一个资源管理器包装和一个检查器包装,根据用户是否使用Explorer或Inspector调用m_ERibbon.Invalidate()
或m_Ribbon.Invalidate()
。
我不明白的是:
- 为什么不
Ribbon_OnLoad
火的时候,为什么不ERibbon_OnLoad
火的时候,尽管我已经显式地设置onLoad
方法发射这些方法? - 为什么有这种情况
m_ERibbon
或m_Ribbon
是Nothing
?
从我可以讲的是,尽管从资源管理器或检查...调用Invalidate()
调用所有尽管有一些回调的回调被调用的方法Invalidate()
被放置在检查,反之亦然。
我理解错了吗?
编辑我添加了GetCustomUI
的代码,因为这是定义标记的地方。尽管Explorer和Inspector都有相应的XML标记,方法Ribbon_OnLoad
(对于检查员)不会触发。
Function GetCustomUI(ByVal RibbonID As String) As String Implements Microsoft.Office.Core.IRibbonExtensibility.GetCustomUI
Select Case RibbonID
Case "Microsoft.Outlook.Mail.Read"
Return basRibbon.QFGetRibbonMailRead()
Case "Microsoft.Outlook.Explorer"
Return basRibbon.GetRibbonExplorerFolder()
Case Else
Return String.Empty
End Select
End Function
和XML标记的一个片段如下(注意,这是对督察):
sRibbonXML = "<customUI xmlns=""http://schemas.microsoft.com/office/2006/01/customui"" onLoad=""Ribbon_OnLoad"" >" & _
代码段为浏览器的XML标记:
sRibbonXML = "<customUI xmlns=""http://schemas.microsoft.com/office/2009/07/customui"" onLoad=""ERibbon_OnLoad"" " & _
尤金,谢谢你的回复。请参阅我编辑的答案,我已经添加了“GetCustomUI”方法的代码和用于构建功能区的XML标记的片段。奇怪的是'Ribbon_OnLoad'不会为检查员启动。 –
请注意,您不处理组成项目。只提及只读检查员。你有没有在Outlook中的任何用户界面错误? –
在生产代码中,我处理组合物品;但是我在上面的例子中省略了它们。我没有从Outlook中获取任何UI错误。从我注意到的情况来看,在XML标记中定义的'onLoad'方法只会触发一次,无论哪个对象,Outlook首先获取Explorer还是Inspector。如果我错了,请纠正我的错误? –