我有一个模板,它使用vba来响应形状事件。通常,当用户双击形状时,将显示一个用户窗体,用户可以使用该窗体编辑形状数据。
我想使用C#将其转换为Visio AddIn。我对大多数通用代码都很满意,但shape事件让我感到困惑!?
Google给了我一个提示,让我下载Visio SDK并查看“持久事件”。然而,按照安装说明,我仍然没有在我的开发者标签中看到“持久事件”--也不确定它们是什么,以及它们是否是我所需要的。
总体而言,它只是觉得严重缺乏文档。有谁能告诉我怎么走吗?
(使用Visio 2016)
发布于 2017-12-14 06:07:41
您是否真的希望使用双击作为交互方法,或者只是因为双击单元格而使用此方法?
如果您这样做了,那么我将继续使用这个单元格,但只需使用QUEUEMARKEREVENT ShapeSheet函数触发一个标记事件,然后侦听Application.MarkerEvents。
如果您希望在右键单击上下文菜单项时显示表单,则使用相同的策略,但将函数放在Action单元格中。
如果您希望窗体在用户选择形状时出现,那么您需要在窗口上侦听SelectionChanged。
一个要问的问题是,你是如何开始倾听的?考虑到应用程序将打开除您的解决方案之外的其他文档,您可能希望从侦听所有DocumentOpened/Created事件开始,然后确定它是否是感兴趣的文档,如果是,则连接您的Application.MarkerEvent侦听。
另一种方法是使用持久事件。在Visio中,有一小部分事件是“持久的”。这是一个事件,可以与文件一起保存,然后在打开时自动连接。例如,(一旦您的SDK正常工作)如果您查看像组织结构图这样的模板,您将看到它包含两个持久事件:

这些事件只能调用插件(不能调用插件),在组织结构图的情况下,它是目标插件。但是,对于您的情况,您可以添加QueueMarkerEvent插件并传递您喜欢的任何参数。这很有用的原因是,它意味着您不必再监视所有文档事件,因为您知道您的文档将触发自己的事件来启动事件。所以你只需要听一听Application.MarkerEvents,确保你的一个参数包含一个唯一的标识符,然后你就可以随心所欲地响应了。
我可以推荐course links in this related post吗?它包含(从ShapeSheet中的操作)触发标记事件的示例代码。
https://stackoverflow.com/questions/47789958
复制相似问题