Chr*_*say 5 c# vsto ribbon ms-word
是否可以使用互操作从另一个应用程序处理自定义功能区按钮上的按钮单击事件?
因此,如果我创建了一个Word 2010应用程序加载项,它创建了一个带有几个按钮的自定义选项卡,然后我使用互操作从C#win表单应用程序实例化一个Word应用程序,那么我将如何连接到按钮单击事件在我的自定义功能区从win窗体应用程序?使用Word 2003,我可以通过CommandBars集合访问按钮,然后只需连接到click事件.
在进一步阅读之后,我想我正在尝试做的是找到如何使用interop访问Ribbon对象模型.这可能吗?
[编辑]
对于任何有兴趣的人.当我写这个问题时,我知道另一种方法来解决我的问题,但这意味着需要做很多额外的工作来改变我现有的实现,从Office 2003升级到Office 2010,所以我希望能够访问Ribbon对象VSTO加载项之外的模型.
我的解决方案是使用IpcChannel从vsto加载项调用我的win-forms应用程序.所以我的win-forms应用程序初始化Word实例,然后打开一个服务器通道.在vsto加载项中,我处理Application.DocumentOpen,如果文档归我的应用程序所有,我打开一个客户端通道到我的应用程序.然后,我可以通过使用共享接口从vsto加载项调用我的win-forms应用程序.
虽然这种技术有效,但确实有一些缺点.如果通过ipc通道的调用是同步的,那么我的应用程序无法触及word对象,因为发生了死锁.进行异步调用会引入其他问题,但我发现我可以使用模态对话框阻止Word窗口,而不会导致死锁.
虽然这不是我原来问题的准确答案,但它是另一种选择,所以我想我会与其他有此问题的人分享.
如果有人知道如何访问VSTO之外的Ribbon对象模型,我仍然有兴趣知道如何.
编辑:我终于发现了一个包含本机 C# 功能区操作的code.msdn.microsoft.com 项目。使用它代替任何 VBA 业务。
原帖:
您不需要 VSTO 以编程方式访问功能区。请访问Word 文章以获取简短的 Word VBA 示例。
我确信有一种方法可以在 C# 中完成相同的任务,但我还没有实现。如果我找到一个,我一定会分享。(我之前贡献了一个包含 C#-VBA 解决方法的答案。)