C# PowerPoint加载项-从文档形状调用加载项功能

C# PowerPoint加载项-从文档形状调用加载项功能,c#,com,ms-office,powerpoint,office-interop,C#,Com,Ms Office,Powerpoint,Office Interop,简短版本:在PowerPoint幻灯片中嵌入控件以将事件发送回应用程序级加载项的首选方法是什么?控件需要在幻灯片放映模式和设计模式下工作 长版本: 我最近参与了PowerPoint遗留插件的开发,简而言之,它从远程数据源提取数据,并在幻灯片上绘制相应的图表。外接程序是托管代码C,但不是使用VSTO构建的-它使用自定义包装器和COM垫片 图表需要定期刷新,为此,我们的外接程序在工具栏中有一个刷新按钮。如果图表在刷新之前无法呈现,我们还将在幻灯片上嵌入一个MSForms.CommandButton作

简短版本:在PowerPoint幻灯片中嵌入控件以将事件发送回应用程序级加载项的首选方法是什么?控件需要在幻灯片放映模式和设计模式下工作

长版本:

我最近参与了PowerPoint遗留插件的开发,简而言之,它从远程数据源提取数据,并在幻灯片上绘制相应的图表。外接程序是托管代码C,但不是使用VSTO构建的-它使用自定义包装器和COM垫片

图表需要定期刷新,为此,我们的外接程序在工具栏中有一个刷新按钮。如果图表在刷新之前无法呈现,我们还将在幻灯片上嵌入一个MSForms.CommandButton作为OLE对象。我们在类似的Excel加载项中成功地使用了这种方法

不幸的是,它在PowerPoint中不起作用:按钮上的单击事件似乎没有到达我们的加载项。我在网上找到了一些支持这一观点的信息。我还使用MSForms.ComboBox而不是按钮对其进行了测试,结果显示,组合框的更改事件到达我们的外接程序,刷新成功

因此,我似乎需要找到另一种方法让按钮与我们的外接程序通信。我可以想出一些方法,我想知道是否有最佳实践:

让按钮或类似形状运行一个宏来调用外接程序中的代码。我听说在设计模式下查看幻灯片时,这可能不起作用,但尚未测试以确认。 在幻灯片中嵌入MSForms表单,以捕获单击事件并将其传递到我们的加载项。同样,这只是一个理论,目前还没有经过检验。 完全使用其他东西——有些东西告诉我必须有一种现代的方式来做这件事,我只是对Office开发不够熟悉,不知道这是什么。
我要补充的是,迁移到VSTO或类似技术(如NetOffice)是一种选择,但如果可能的话,我们更愿意避免这种情况。谢谢

嗨@smash你是怎么做的???我也有类似的要求。我在考虑使用自己的ppt形状,但它们不会触发事件。然后考虑使用OLE对象,但它们仅在幻灯片放映模式下触发事件。你发现了什么?@Rafeal-很抱歉耽搁了你,你选择了一个繁忙的两周时间来问这个问题无论如何,我无法解决这个问题。组合框黑客成功了,但造成了其他问题,它造成了一个引用泄漏。我们最终删除了该按钮,因为它复制了外接程序工具栏的功能。也许这就是你的答案?对不起,我帮不上什么忙了。