Visio VSTO:形状事件?

问题描述 投票:0回答:1

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

我想使用C#将其转换为Visio AddIn。大多数通用代码我都很好,但形状事件让我感到难过!?

Google给我留下了一个暗示下载Visio SDK并查看“持久性事件”的提示。然而,根据安装说明,我仍然没有在我的开发人员选项卡中看到“持久性事件” - 并且不确定它们是什么以及它们是否是我需要的。

总的来说,它只是感觉严重缺乏文档。有人能指出我正确的方向吗?

(与Visio 2016合作)

c# vsto visio
1个回答
1
投票

你真的想要使用双击作为交互方法,还是只是因为双击单元格而使用它?

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

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

如果您希望在用户选择形状时显示该表单,则需要侦听SelectionChanged,也许是Window。

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

另一种方法是使用持久性事件。在Visio中,有少量事件是“可持久的”。这是一个可以随文件一起保存的事件,然后在打开时自动连接。例如,(一旦你的SDK工作),如果你看一下像Org Chart这样的模板,你会发现它包含两个持久性事件:

enter image description here

这些事件只能调用Addons(不是Addins),而在Org Chart的情况下,它就是Addon的目标。但是,对于您的情况,您可以添加QueueMarkerEvent Addon并传递您喜欢的任何参数。这很有用的原因是,它意味着您不再需要监视所有文档事件,因为您知道您的文档将触发自己的事件以启动它。因此,您只需要监听Application.MarkerEvents,确保其中一个args包含唯一标识符,然后您可以根据需要进行响应。

我可以推荐course links in this related post,其中包括要触发的Marker事件的示例代码(来自ShapeSheet中的Action)吗?

© www.soinside.com 2019 - 2024. All rights reserved.