【发布时间】:2022-04-12 02:12:06
【问题描述】:
我目前正在尝试开发一个扩展现有功能的 Outlook 加载项。为了让它工作,我需要挂钩到现有按钮的 On-Click-Event(我有它的 IdMso),并执行其他代码。这可能吗?如果可以,怎么做?我使用 C# 作为编程语言。
【问题讨论】:
标签: c# outlook vsto outlook-addin ribbonx
我目前正在尝试开发一个扩展现有功能的 Outlook 加载项。为了让它工作,我需要挂钩到现有按钮的 On-Click-Event(我有它的 IdMso),并执行其他代码。这可能吗?如果可以,怎么做?我使用 C# 作为编程语言。
【问题讨论】:
标签: c# outlook vsto outlook-addin ribbonx
是的,可以重新利用内置控件。功能区 XML 中的 commands 元素可以解决问题,例如:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="OnLoad" >
<commands>
<command idMso="FileSave" onAction="mySave" />
</commands>
<ribbon startFromScratch="false">
<tabs>
<tab id="tab1" label="Repurpose Command Demo" >
<group id="group1" label="Demo Group">
<toggleButton id="togglebutton1"
imageMso="AcceptInvitation"
size="large"
label="Alter Built-ins"
onAction="changeRepurpose" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
此示例使用命令元素创建对 Microsoft Office 中保存文件功能的引用。通过使用 idMso 属性,您可以确定此组件包含内置于 Microsoft Office 中的参考功能。
对于功能区按钮,回调如下所示:
C#: void OnAction(IRibbonControl control, ref bool CancelDefault)
VBA: Sub OnAction(control As IRibbonControl, byRef CancelDefault)
C++: HRESULT OnAction([in] IRibbonControl *pControl, [in,out] VARIANT _BOOL *fCancelDefault)
Visual Basic: Sub OnAction(control As IRibbonControl, byRef CancelDefault)
对于toggleButton 控件:
C#: void OnAction(IRibbonControl control, bool pressed, ref bool cancelDefault)
VBA: Sub OnAction(control As IRibbonControl, pressed As Boolean, byRef cancelDefault)
C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] VARIANT_BOOL *pvarfPressed, [in,out] VARIANT _BOOL *fCancelDefault)
Visual Basic: Sub OnAction(control As IRibbonControl, pressed As Boolean, byRef CancelDefault)
请参阅Temporarily Repurpose Commands on the Office Fluent Ribbon 了解更多信息。
默认情况下,如果 VSTO 加载项尝试操作 Microsoft Office 用户界面 (UI) 并失败,则不会显示错误消息。但是,您可以将 Microsoft Office 应用程序配置为显示与 UI 相关的错误消息。您可以使用这些消息来帮助确定不显示自定义功能区的原因,或显示功能区但未显示控件的原因。有关更多信息,请参阅How to: Show Add-in user interface errors。
【讨论】:
<commands><command idMso="DirectRepliesTo" onAction="mySave" /></commands> 修改了xml 并创建了方法public void mySave(Office.IRibbonControl control, ref bool CancelDefault){CancelDefault = false;} 但现在如果我点击按钮什么也不会发生