我对Outlook对象模型中公开的IRibbonUI
接口的实现感到困惑。
当编写Explorer或Inspector功能区的XML文件时,我们必须定义哪个方法负责将XML加载到Outlook中。
注意:此代码最初并非由我编写,但我的任务是修复解决方案..或者至少找到为什么这个东西不能按预期工作的原因。
无论如何,设置色带的方法在以下方法中定义: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
现在我感到困惑的是为什么Inspector的方法永远不会发生?当我单步执行代码时,甚至在打开检查器对象时,我的全局变量m_Ribbon
有时为Nothing
,反之亦然m_ERibbon
变量。
有些时候m_ERibbon
一无所有,有时候m_Ribbon
一无所有......我开始认为我可能已经深深地误解了Ribbon for Office的工作方式。
现在,当我必须通过Invalidate
方法调用回调时,它变得更加复杂。我有一个资源管理器包装器和一个检查器包装器,它调用m_ERibbon.Invalidate()
或m_Ribbon.Invalidate()
,具体取决于用户是使用Explorer还是Inspector。
我不明白的是:
Ribbon_OnLoad
一直没有开火,为什么ERibbon_OnLoad
一直没有开火,尽管事实上我已经明确地设定onLoad
方法来解雇这些方法? m_ERibbon
或m_Ribbon
为Nothing
的情况?尽管我从Explorer或Inspector调用了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标记的片段(注意这是针对Inspector的):
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"" " & _
答案 0 :(得分:0)
Microsoft Office应用程序调用{{3}}方法以获取定义自定义功能区用户界面的XML字符串。
import numpy as np
values = np.array(arr)
searchval = ["81", "01"]
N = len(searchval)
possibles = np.where(values == searchval[0])[0]
solns = []
for p in possibles:
check = values[p:p+N]
if np.all(check == searchval):
arr.pop(p+1)
solns.append(p)
print(solns)
注意,有时您需要为作为参数传递的不同public class Connect : Object, Extensibility.IDTExtensibility2, IRibbonExtensibility
...
public string GetCustomUI(string RibbonID)
{
StreamReader customUIReader = new System.IO.StreamReader("C:\\RibbonXSampleCS\\customUI.xml");
string customUIData = customUIReader.ReadToEnd();
return customUIData;
}
值返回XML标记。在这种情况下,您将调用ribbonID
回调(对于检查员也是如此)。
onLoad
有关详细信息,请参阅GetCustomUI。
您可以在MSDN的以下系列文章中阅读有关Fluent UI(又名Ribbon UI)的更多信息:
请记住,默认情况下,如果VSTO加载项尝试操作Microsoft Office用户界面(UI)并失败,则不会显示任何错误消息。但是,您可以将Microsoft Office应用程序配置为显示与UI相关的错误的消息。您可以使用这些消息来帮助确定未显示自定义功能区的原因,或者为何显示功能区但未显示控件的原因。有关详细信息,请参阅Customizing the 2007 Office Fluent Ribbon for Developers (Part 3 of 3)。