Visio VSTO:形状事件?

Visio VSTO : Shape Events?

我有一个模板,它使用 vba 来响应形状事件。 通常,当用户双击一个形状时,会显示一个用户表单,用户可以使用该表单编辑形状数据。

我想使用 C# 将其转换为 Visio AddIn。 我可以接受大部分通用代码,但形状事件让我感到困惑!?

Google 提示我下载 Visio SDK 并查看 'persistent events'。然而按照安装说明,我仍然没有在我的开发人员选项卡中看到 'persistent events' - 并且不确定它们是什么以及它们是否是我需要的。

总的来说,感觉文档严重缺乏。 谁能给我指明正确的方向?

(使用 Visio 2016)

您真的想使用双击作为交互方式,还是只是因为双击单元格才使用它?

如果你这样做,那么我会继续使用这个单元格,但只是用 QUEUEMARKEREVENT ShapeSheet 函数触发一个标记事件,然后监听 Application.MarkerEvents.

如果您希望在右键单击上下文菜单项时显示表单,请使用相同的策略,但将函数放在 Action 单元格中。

如果您希望表单在用户刚刚选择形状时出现,那么您需要在 Window.

上监听 SelectionChanged

要问的一个问题是,你是如何开始聆听的?考虑到该应用程序将打开除您的解决方案之外的其他文档,您可能希望首先侦听所有 DocumentOpened/Created 事件,然后确定它是否是一个感兴趣的文档,如果是,则连接您的 Application.MarkerEvent 倾听。

另一种方法是使用持久性事件。在 Visio 中,有少量事件 'persistable'。这是一个可以与文件一起保存的事件,然后在打开时自动连接。例如,(一旦您的 SDK 开始工作)如果您查看像组织结构图这样的模板,您会看到它包含两个持久事件:

这些事件只能调用插件(而不是插件),在组织结构图中,目标是插件。但是,对于您的情况,您可以添加 QueueMarkerEvent 插件并传递您喜欢的任何参数。这是有用的原因,因为它意味着您不再需要监视所有文档事件,因为您知道您的文档将触发自己的事件来启动事件。所以你只需要听 Application.MarkerEvents,确保你们其中一个 args 包含一个唯一的标识符,然后你可以随意回应。

我可以推荐 ,它包含触发标记事件的示例代码(来自 ShapeSheet 中的 Action)吗?