Freigeben über


Gewusst wie: Verändern von Strukturansichten mithilfe von UIHierarchy

Add-Ins für Visual Studio sind in Visual Studio 2013 veraltet. Sie müssen für Ihre Add-Ins ein Upgrade auf VSPackage-Erweiterungen durchführen. Weitere Informationen über das Durchführen eines Upgrades finden Sie unter FAQ: Konvertieren von Add-Ins in VSPackage-Erweiterungen.

Einige Toolfenster in Visual Studio wie der Projektmappen-Explorer weisen explizit keine Automatisierungsobjekte zum Ändern des Fensterinhalts auf. Dafür bieten diese Toolfenster eine so genannte Strukturansicht, d. h., eine hierarchisch in Knoten gegliederte Ansicht, auf die der programmgesteuerte Zugriff möglich ist. Das UIHierarchy-Objekt stellt die Strukturansichten in diesen Toolfenstern dar und ermöglicht Ihnen, die Fenster zu durchlaufen und den jeweiligen Inhalt unter den einzelnen Knoten anzuzeigen.

Objektname

Beschreibung

UIHierarchy-Objekt

Stellt die Strukturansicht im angegebenen Toolfenster dar.

UIHierarchyItems-Auflistung

Stellt alle Knoten in der Strukturansicht dar.

UIHierarchyItem-Objekt

Repräsentiert einen einzelnen Knoten in der Strukturansicht.

Mithilfe dieser Objekte und Auflistungen können Sie folgende Aufgaben ausführen:

  • Einen einzelnen oder mehrere Knoten in der Strukturansicht auswählen und anzeigen.

  • Die Einfügemarke in der Strukturansicht nach oben oder unten verschieben.

  • Den Wert des ausgewählten Elements zurückgeben oder veranlassen, dass die jeweilige Standardaktion ausgeführt wird.

Das ToolWindows-Objekt (das auch von ToolWindows zurückgegeben wird), ermöglicht ein einfacheres Erstellen von Verweisen auf die verschiedenen Toolfenster in Visual Studio. Statt _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput) können Sie nun _applicationObject.ToolWindows.OutputWindow verwenden.

Hinweis

Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen.Bei der Entwicklung dieser Verfahren war die Option Allgemeine Entwicklungseinstellungen aktiviert.Wählen Sie im Menü Extras die Option Einstellungen importieren und exportieren aus, um die Einstellungen zu ändern.Weitere Informationen finden Sie unter Anpassen der Entwicklungseinstellungen in Visual Studio.

Beispiel

Obwohl das UIHierarchy-Objekt den Inhalt nahezu aller Toolfenster mit einer Strukturansicht darstellt, z. B. Projektmappen-Explorer, handelt es sich dennoch nach wie vor um ein Window-Objekt. Die UIHierarchyItems-Eigenschaft gibt die Auflistung der Knoten auf oberster Ebene im angegebenen Toolfenster zurück. Im Projektmappen-Explorer gibt es nur einen einzelnen Knoten auf oberster Ebene, die Projektmappe. Das bedeutet, dass sich der Projektknoten für dieses Fenster in der Auflistung des Knotens der obersten Ebene und nicht in der UIHierarchyItems-Auflistung des Fensters befinden.

Daher gibt es zwei Möglichkeiten, in einer Strukturansicht auf einen bestimmten Knoten (UIHierarchyItem) zuzugreifen:

  • Durch Verwenden der GetItem-Methode zum direkten Verweisen auf den gewünschten Knoten mithilfe eines Musters in der Form Projektmappe/Projekt/Element.

  • Durch Verwenden von UIHierarchyItems.Item.UIHierarchyItems... (ein Muster in der Form Auflistung/Element/Auflistung)

    Wenn Sie zu einem tiefer geschachtelten Knoten navigieren möchten, setzen Sie dieses Muster einfach fort. Um z. B. zu einem Knoten zu wechseln, der dem Knoten der obersten Ebene untergeordnet ist, verwenden Sie UIHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2).

Die folgenden Beispiele veranschaulichen beide Verfahren für den Zugriff auf einen untergeordneten Knoten.

Diese Add-In-Beispiele veranschaulichen, wie die verschiedenen Member des UIHierarchy-Automatisierungsmodells referenziert und verwendet werden, um alle Elemente im Projektmappen-Explorer aufzulisten.

Im ersten Beispiel wird die Strategie der GetItem-Methode verwendet, um auf den Inhalt des Knotens Verweise im Projektmappen-Explorer zuzugreifen. Weitere Informationen zum Ausführen des Add-In-Codes finden Sie unter Gewusst wie: Kompilieren und Ausführen der Codebeispiele für das Automatisierungsobjektmodell.

Hinweis

Das Beispiel für den Projektmappen-Explorer sendet die Daten an ein Meldungsfeld.

Imports System.Text

Public Sub OnConnection(ByVal application As Object, ByVal  _
connectMode As ext_ConnectMode, ByVal addInInst As Object,  _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    listSlnExpNodes(_applicationObject)
End Sub

Sub listSlnExpNodes(dte as DTE2)
    ' Requires reference to System.Text for StringBuilder.
    Dim UIH As UIHierarchy = dte.ToolWindows.SolutionExplorer
    ' Set a reference to the first level nodes in Solution Explorer. 
    ' Automation collections are one-based.
    Dim UIHItem As UIHierarchyItem = _
      UIH.GetItem("MyAddin1\MyAddin1\References")
    Dim file As UIHierarchyItem
    Dim sb As New StringBuilder

    ' Iterate through first level nodes.
    For Each file In UIHItem.UIHierarchyItems
        sb.AppendLine(file.Name)
        ' Iterate through second level nodes (if they exist).
        Dim subitem As UIHierarchyItem
        For Each subitem In file.UIHierarchyItems
            sb.AppendLine("   " & subitem.Name)
        Next
    Next
    MsgBox(sb.ToString)
End Sub
using System.Text;

public void OnConnection(object application, ext_ConnectMode _
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    listSlnExpNodes(_applicationObject);
}

public void listSlnExpNodes(DTE2 dte)
{
    // Requires reference to System.Text for StringBuilder.
    UIHierarchy UIH = dte.ToolWindows.SolutionExplorer;
    // Set a reference to the first level nodes in Solution Explorer. 
    // Automation collections are one-based.
    UIHierarchyItem UIHItem = 
      UIH.GetItem("MyAddin1\\MyAddin1\\References");
    StringBuilder sb = new StringBuilder();

   // Iterate through first level nodes.
   foreach ( UIHierarchyItem file in UIHItem.UIHierarchyItems )
   {
       sb.AppendLine(file.Name);
       // Iterate through second level nodes (if they exist).
       foreach ( UIHierarchyItem subitem in file.UIHierarchyItems )
       {
           sb.AppendLine("   "+subitem.Name);
       }
   }
   MessageBox.Show(sb.ToString());
}

Im folgenden Beispiel wird veranschaulicht, wie UIHierarchy zum Auflisten des Inhalts der Strukturansicht des Fensters Projektmappen-Explorer verwendet wird.

Sub cvTreeView()
    Dim uih As UIHierarchy = DTE.ToolWindows.SolutionExplorer
    Dim uihItem As UIHierarchyItem
    Dim uihItems As UIHierarchyItems = uih.UIHierarchyItems
    Dim msg As String
    For Each uihItem In uihItems
        msg += uihItem.Name & vbCr
    Next
    MsgBox(msg)
End Sub

Siehe auch

Aufgaben

Gewusst wie: Steuern des Projektmappen-Explorers

Gewusst wie: Ändern des Erscheinungsbilds eines Fensters

Konzepte

Diagramm "Automationsobjektmodell"

Weitere Ressourcen

Erstellen und Steuern von Umgebungsfenstern

Erstellen von Add-Ins und Assistenten

Referenz zur Automatisierung und Erweiterbarkeit