是否可以使用互操作从另一个应用程序处理自定义功能区按钮上的按钮单击事件?
因此,如果我创建了一个Word 2010应用程序加载项,它创建了一个带有几个按钮的自定义选项卡,然后我使用互操作从C#win表单应用程序实例化Word应用程序,那么我将如何连接到按钮从win窗体应用程序中单击自定义功能区上的事件?使用Word 2003,我可以通过CommandBars集合访问按钮,然后只需连接到click事件。
经过一些进一步的阅读后,我想我正在尝试做的是找出如何使用互操作来访问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对象模型,我仍然有兴趣知道如何。
答案 0 :(得分:1)
修改:我终于发现了一个包含原生C#功能区操作的 code.msdn.microsoft.com project 。使用它而不是任何VBA业务。
原帖:
您不需要VSTO以编程方式访问功能区。访问Word Articles获取简短的Word VBA示例。
我确信有一种方法可以在C#中完成相同的工作,但我还没有实现。如果我找到一个,我一定会分享。 (I previously contributed an answer包含C#-VBA解决方法。)