我有一个模板,它使用vba来响应形状事件。 通常,当用户双击某个形状时,会显示一个用户表单,可用于编辑形状数据。
我想使用C#将其转换为Visio AddIn。 大多数通用代码我都很好,但形状事件让我感到难过!?
谷歌给我留下了一个暗示下载Visio SDK并查看'持久性事件'的提示。然而,根据安装说明,我仍然没有在我的开发人员选项卡中看到“持久性事件” - 并且不确定它们是什么以及它们是否是我需要的。总的来说,它只是感觉严重缺乏文档。 有人能指出我正确的方向吗?
(使用Visio 2016)
答案 0 :(得分:1)
您是否真的想使用双击作为交互方法,或者您只是因为双击单元格而使用此方法?
如果你这样做,那么我将继续使用这个单元格,但只需使用QUEUEMARKEREVENT ShapeSheet函数触发标记事件,然后监听Application.MarkerEvents。
如果要在右键单击上下文菜单项时显示该表单,请使用相同的策略,但将该功能放在“操作”单元格中。
如果您希望在用户选择形状时显示该表单,则需要侦听SelectionChanged,也许是Window。
要问的问题是,你如何开始倾听?考虑到应用程序将打开除您的解决方案之外的其他文档,您可能希望首先监听所有DocumentOpened / Created事件,然后确定它是否是感兴趣的文档然后,如果是,则连接您的应用程序.MarkerEvent听。
另一种方法是使用Persistent事件。在Visio中,有少量事件是“可持续的”'。这是一个可以随文件一起保存的事件,然后在打开时自动连接。例如,(一旦你的SDK工作),如果你看一下像Org Chart这样的模板,你会发现它包含两个持久性事件:
这些事件只能调用Addons(不是Addins),而在组织结构图中,它是Addon的目标。但是,对于您的情况,您可以添加QueueMarkerEvent Addon并传递您喜欢的任何参数。这很有用的原因是,它意味着您不再需要监视所有文档事件,因为您知道您的文档将触发自己的事件以启动它。因此,您只需要监听Application.MarkerEvents,确保其中一个args包含唯一标识符,然后您可以根据需要进行响应。
我可以推荐course links in this related post,其中包括要触发的Marker事件的示例代码(来自ShapeSheet中的Action)吗?