【问题标题】:Outlook Add-In VSTO - Hook into click of existing buttonOutlook 加载项 VSTO - 挂钩单击现有按钮
【发布时间】:2022-04-12 02:12:06
【问题描述】:

我目前正在尝试开发一个扩展现有功能的 Outlook 加载项。为了让它工作,我需要挂钩到现有按钮的 On-Click-Event(我有它的 IdMso),并执行其他代码。这可能吗?如果可以,怎么做?我使用 C# 作为编程语言。

【问题讨论】:

    标签: c# outlook vsto outlook-addin ribbonx


    【解决方案1】:

    是的,可以重新利用内置控件。功能区 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

    【讨论】:

    • 感谢你的回答!我现在已经按照你写的那样做了,但是,它并没有真正起作用。 Outlook 似乎可以识别更改,因为当我按下按钮时没有任何反应,但它也不会执行我在 mySave 方法中编写的代码
    • 你可以再详细一点吗?您需要重新调整用途的命令是什么,您的代码是什么?
    • 如果单击 DirectRepliesTo,我想执行自定义代码。它应该打开窗口并执行正常任务(启用复选框并用当前电子邮件地址填充它),但它应该执行附加代码。我按照你告诉&lt;commands&gt;&lt;command idMso="DirectRepliesTo" onAction="mySave" /&gt;&lt;/commands&gt; 修改了xml 并创建了方法public void mySave(Office.IRibbonControl control, ref bool CancelDefault){CancelDefault = false;} 但现在如果我点击按钮什么也不会发生
    • 您是否收到任何功能区 UI 错误?你什么时候返回那个 XML?
    • 我没有收到任何错误。我认为该方法的参数是错误的,因为此 XML 中的所有其他自添加按钮和下拉菜单都可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多