Gewusst wie: Verändern von Strukturansichten mithilfe von UIHierarchy

Einige Toolfenster in Visual Studio, wie Projektmappen-Explorer, haben keine explizite Automatisierungsobjekte, die Sie verwenden können, um ihren Inhalt zu bearbeiten.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 das einfachere Verweisen der verschiedenen Toolfenster in Visual Studio.Statt _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput) können Sie nun _applicationObject.ToolWindows.OutputWindow verwenden.

HinweisHinweis

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 Visual Studio-Einstellungen.

Beispiel

Obwohl das UIHierarchy-Objekt den Inhalt nahezu darstellt, ist jedes Toolfenster, in dem eine Strukturansicht, wie Projektmappen-Explorer, das Toolfenster selbst hat, noch 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.Daher ist der Projektknoten für dieses bestimmte Fenster in der - Auflistung des Knotens der obersten Ebene und nicht in der Auflistung UIHierarchyItems des Fensters.

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 Automatisierungsmodells UIHierarchy und verwendet, um alle Elemente in 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.

HinweisHinweis

Im Beispiel für 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());
}

Das folgende Beispiel veranschaulicht, wie UIHierarchy verwendet, um den Inhalt der Strukturansicht des Fensters Projektmappen-Explorer aufzulisten.

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