2017-02-15 5 views
0

Ich kann die Informationen der Methode SpartialNeighbors nicht aus einer "Package (expanded)" Form erhalten.Visio: Wie erhalten Sie die Formen, die in einer Form enthalten sind?

Normalerweise verwende ich diesen Code:

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 

Und das funktioniert völlig in Ordnung für Formen wie in der Standard-UML-Schablone (nameU = „Übersicht“)

Ich weiß, ich kann die Formen-Gruppe, aber es erhöht die Anstrengung.

Ein weiterer Punkt, wenn ich andere Formen analysiere sehe ich mit "MemberOfContainers", dass die Form in "Paket (erweitert)" enthalten ist. Es muss also möglich sein, die Information von der anderen Seite zu bekommen, ohne alle Formen zu durchlaufen.

Hier können Sie das „Paket“ und Formen der „Schnittstelle“ Extract of the diagram

Antwort

1

sehen, ob eine Form ein Behälter ist, dann ist es ContainerProperties Eigenschaft wird aufgefüllt werden (dh nicht null). Sie können das dann abfragen, um ein Array von Elementform-IDs abzurufen.

Das Folgende ist eine leicht angepasste Version von Code Probe im Download SDK gefunden - basierend auf einem Dokument wie folgt aussehen:

Visio Container Shapes

Sie halten die Mitglieds Formen wie diese:

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 

Diese in der folgenden Ausgabe führen wird (die Feststellung, dass 'InterfaceThree' nicht enthalten ist):

Interface  Text = InterfaceOne 
Interface.30 Text = InterfaceTwo 
Verwandte Themen