我无法从"包(扩展)"中获取方法SpartialNeighbors的信息。形状。
通常我使用此代码:
Dim s As Shape, vsoShapeOnPage As Shape
Dim vsoReturnedSelection As Visio.Selection
's contains the current shape
Set vsoReturnedSelection = s.SpatialNeighbors(visSpatialContain, 0, visSpatialIncludeContainerShapes)
If vsoReturnedSelection.Count = 0 Then
'No Shapes contained
Else
For Each vsoShapeOnPage In vsoReturnedSelection
'Code
Next
End If
这适用于默认UML模板中的形状(nameU ="概述")
我知道我可以将形状分组,但它增加了工作量。
另一点,当我分析其他形状时,我会看到" MemberOfContainers"形状包含在"包装(展开)"中。因此,必须能够从其他方式获取信息而无需经历所有形状。
答案 0 :(得分:1)
如果形状是容器,则将填充它的ContainerProperties属性(即非空)。然后,您可以对其进行interogate以检索成员形状ID数组。
以下是SDK下载中的一些示例代码的略微改编版本 - 基于如下文档:
你可以抓住这样的成员形状:
Sub CheckMyPackageContainer()
'Assumes container is selected shape in active drawing window
Call ReportContainerShape(ActiveWindow.Selection.PrimaryItem)
End Sub
Sub ReportContainerShape(ByRef contShp As Visio.Shape)
If Not contShp Is Nothing Then
Dim containerProps As ContainerProperties
Set containerProps = contShp.ContainerProperties
If Not containerProps Is Nothing Then
Dim lngContainerMembers() As Long
lngContainerMembers = containerProps.GetMemberShapes(Visio.VisContainerFlags.visContainerFlagsDefault)
Dim hostingPage As Visio.Page
Set hostingPage = contShp.ContainingPage
For Each varMember In lngContainerMembers
Dim shpItem As Visio.Shape
Set shpItem = hostingPage.Shapes.ItemFromID(varMember)
Debug.Print shpItem.NameU, "Text = " & shpItem.Text
Next
End If
End If
End Sub
这将产生以下输出(注意' InterfaceThree'不包括在内):
Interface Text = InterfaceOne
Interface.30 Text = InterfaceTwo