C# Visio VSTO:形状事件?

C# Visio VSTO:形状事件?,c#,vsto,visio,C#,Vsto,Visio,我有一个模板,它使用vba来响应形状事件。 通常,当用户双击形状时,会显示一个用户表单,用户可以使用该表单编辑形状数据 我想使用C#将其转换为Visio加载项。 大多数常规代码我都可以,但shape事件让我感到困惑 谷歌给了我一个提示,让我下载VisioSDK并查看“持久事件”。但是按照安装说明,我仍然没有在我的开发者标签中看到“持久事件”,也不确定它们是什么以及它们是否是我所需要的 总的来说,它只是觉得严重缺乏文档。 谁能给我指一下正确的方向吗 (与Visio 2016合作)您真的想使用双击作

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

我想使用C#将其转换为Visio加载项。 大多数常规代码我都可以,但shape事件让我感到困惑

谷歌给了我一个提示,让我下载VisioSDK并查看“持久事件”。但是按照安装说明,我仍然没有在我的开发者标签中看到“持久事件”,也不确定它们是什么以及它们是否是我所需要的

总的来说,它只是觉得严重缺乏文档。 谁能给我指一下正确的方向吗


(与Visio 2016合作)

您真的想使用双击作为交互方法,还是因为双击单元格而使用这种方法

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

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

如果您希望表单在用户选择形状时显示,那么您需要在(可能的)窗口上侦听SelectionChanged

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

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

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


我是否可以推荐,其中包括正在激发的标记事件的示例代码(来自ShapeSheet中的操作)

功能区中出现的SDK工具有“事件监视器”、“持久事件”和“打印ShapeSheet”-听起来好像没有正确安装。如果您在“程序和功能”下查看,它应该会显示版本-您的说明是什么?名称:Microsoft Visio SDK 2016版本:16.0.4288.1001这很奇怪。我想我的下一个问题是你是否安装了与应用程序匹配的版本-即x86 SDK和x86应用程序?如果是这样的话,它仍然不起作用,我会在微软论坛上提出一个问题:啊哈!解决了这个问题。愚蠢的错误,我只是混淆了32/64位版本很容易做到。很高兴你们都对这两个部分都很满意。约翰,非常感谢你。不幸的是,我无法访问这些链接(我有一个过度保护的雇主,他管理着我可以访问的网站),但是你上面的笔记中有足够的内容让我找到了正确的方向。首先,我将=RUNADDONWARGS添加到我的主形状表中,这给了我所需的dblclick到C#链接。(稍有不同,但我相信效果是一样的?)奖励是你们坚持不懈的活动提示。所以不,我可以忘记所有混乱的“我正在打开或创建什么样的文档”逻辑。。。太棒了!!!嗨,约翰,如果你还在的话,我还有一个与此相关的‘问题’(还有悬赏!)。厚颜无耻我知道,但你似乎知道你的东西;)