Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C Visio容器_C#_Vsto_Visio - Fatal编程技术网

C# C Visio容器

C# C Visio容器,c#,vsto,visio,C#,Vsto,Visio,我正在努力使用C获取容器中的内容。 如果只是在页面上绘制,效果很好,但一旦转换为母版,它就不再被识别为“容器” 比如说。 从“插入”选项卡创建新容器。 从“主页”选项卡,在容器中绘制2个矩形,在每个矩形中键入一些文本,然后“添加到基础容器” 之后,下面的代码报告两个矩形名称和文本 但是,我现在将容器拖动到模具中以创建主控形状。 然后我将母版拖到页面以创建一个实例 现在代码根本找不到任何MemberShapes 我做错了什么? 感谢您的任何建议/指导 foreach (Microsoft.

我正在努力使用C获取容器中的内容。 如果只是在页面上绘制,效果很好,但一旦转换为母版,它就不再被识别为“容器”

比如说。 从“插入”选项卡创建新容器。 从“主页”选项卡,在容器中绘制2个矩形,在每个矩形中键入一些文本,然后“添加到基础容器”

之后,下面的代码报告两个矩形名称和文本

但是,我现在将容器拖动到模具中以创建主控形状。 然后我将母版拖到页面以创建一个实例

现在代码根本找不到任何MemberShapes

我做错了什么? 感谢您的任何建议/指导

    foreach (Microsoft.Office.Interop.Visio.Shape shape in Globals.ThisAddIn.Application.ActivePage.Shapes)
                {

                    System.Diagnostics.Debug.WriteLine(shape.Name);

                    if (shape.ContainerProperties != null) {
                        foreach (int memberID in shape.ContainerProperties.GetMemberShapes(0)) {
                            Microsoft.Office.Interop.Visio.Shape vsoShape = Globals.ThisAddIn.Application.ActivePage.Shapes.ItemFromID[memberID];
                            Debug.Print(vsoShape.Name);
                            Debug.Print(vsoShape.Text);
                        }
                    }
}

我怀疑是你的杰作给你带来了麻烦。如果您将新容器拖到文档模具上以创建主控形状,则成员形状将随之出现。然而,Visio喜欢将大师级人物分组,如果他们不是,它会将他们分组。如果您取消对新实例形状容器和成员的分组,然后再次运行代码,它将按预期报告。问题是它会中断与主机的链接

我认为您需要将形状分解为单独的成员和容器主控形状

如果要删除列表类型容器形状,则可以指示Visio使用User.msvSDListItemMaster+EventDrop组合删除其他列表项形状。有关详细信息,请参见文章的“指定要插入列表的形状”部分。不幸的是,这不适用于直容器形状,因为新成员形状的放置位置未知

如果您想要一个预填充的容器,那么一个选项是在代码中侦听drop事件并在处理程序中添加新成员,或者从EventDrop单元格使用QUEUEMARKEREVENT ShapeSheet函数启动MarkerEvent。同样,这意味着您需要监听和处理应用程序标记事件

我不知道您对Visio事件有多熟悉,但我在此处视频的代码部分介绍了这些事件:

更新2017年12月13日-同时添加相关课程文件帖子,课程中使用了哪些演示代码: