Porady: manipulowanie widoków drzewa za pomocą UIHierarchy

Dodatki Visual Studio zostały zaniechane w programie Visual Studio 2013.Dodatki należy uaktualniać do pakietu rozszerzenia VSPackage.Aby uzyskać więcej informacji na temat uaktualniania, zobacz Często zadawane pytania: konwertowanie dodatków na rozszerzenia pakietu VSPackage.

Niektóre okna narzędzi w Visual Studio, takie jak Kreatorze rozwiązań, nie mają jawnych obiektów automatyzacji, które służą do manipulowania ich zawartością.Te narzędzia okien mają jednak widok drzewa — czyli hierarchicznego, konspektu stylu, widoku węzła — dostępny programowo.UIHierarchy Obiekt reprezentuje widok drzewa w tych oknach narzędzi i umożliwia iteracyjne przeglądanie ich i wyświetlanie zawartość ich węzłów.

Nazwa obiektu

Opis

UIHierarchyObiekt

Reprezentuje widok drzewa w oknie określonego narzędzia.

kolekcja UIHierarchyItems

Reprezentuje wszystkie węzły w widoku drzewa.

UIHierarchyItemObiekt

Reprezentuje pojedynczy węzeł w widoku drzewa.

Za pomocą tych obiektów i kolekcji, możesz:

  • Wybierz (pojedynczo lub przez mnożenie) i wyświetl węzły w widoku drzewa.

  • Przesuń punkt wstawiania w górę lub w dół w widoku drzewa.

  • Zwraca wartość zaznaczonego elementu lub wykonanie przez ten element jego czynności domyślnej.

ToolWindows obiektu (który jest również zwracany z ToolWindows) pozwala łatwiej odwoływać się do różnych narzędzi systemu windows w Visual Studio.Na przykład, zamiast używać _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput), można teraz używać _applicationObject.ToolWindows.OutputWindow.

[!UWAGA]

Polecenia menu i okien dialogowych mogą różnić się od tych opisanych w Pomocy, w zależności od ustawień aktywnych lub wydania.Procedury te zostały opracowane z ogólnych ustawień projektowych active.Aby zmienić swoje ustawienia, wybierz Importuj i eksportujustawienia w menu Narzędzia.Aby uzyskać więcej informacji, zobacz Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.

Przykład

Chociaż obiekt UIHierarchy reprezentuje zawartość niemal każdego okna narzędzi, które posiada widok drzewa, takich jak Eksplorator rozwiązań, samo okna Narzędzie jest nadal obiektem Window.UIHierarchyItems właściwość zwraca kolekcję węzłów najwyższego poziomu w oknie określonego narzędzia.W Eksploratorze rozwiązań istnieje tylko jeden węzeł najwyższego poziomu (rozwiązanie).W związku z tym, węzeł projektu dla tego określonego okna znajduje się w kolekcji węzła najwyższego poziomu, a nie w oknie kolekcji UIHierarchyItems.

Mając to na uwadze, istnieją dwa sposoby dostępu do określonego węzła (UIHierarchyItem) w widoku drzewa:

  • Za pomocą metody GetItem do bezpośredniego odwołania się do odpowiedniego węzła przy użyciu szablonu rozwiązania/projektu/elementu.

  • Za pomocą UIHierarchyItems.Item.UIHierarchyItems... (szablon kolekcji/elementu/kolekcji).

    Aby nawigować głębiej do zagnieżdżenia węzłów, po prostu skorzystaj z tego wzoru.Na przykład, aby przejść do węzła podrzędnego do węzła najwyższego poziomu, można użyć UIHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2).

Przykłady użycia obu tych technik do uzyskania dostępu do węzła niższego poziomu zostały przedstawione w poniższych przykładach.

Te przykłady dodatków pokazują jak odwołać się i używać różnych członków UIHierarchy automatyzacji modelu, aby wyświetlić listę wszystkich elementów w Eksploratora rozwiązania.

W pierwszym przykładzie użyto GetItem strategii metody uzyskiwania dostępu do zawartości węzła odwołania w Eksplorerze rozwiązania.Aby uzyskać więcej informacji na temat sposobu uruchamiania kodu dodatku, zobacz Porady: kompilowanie i uruchamianie kodu modelu obiektów automatyzacji — przykłady.

[!UWAGA]

Przykład dla Eksplorera rozwiązania wysyła swoje dane do okna komunikatu.

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());
}

Poniższy przykład ilustruje sposób użycia UIHierarchy wyświetlania zawartości w widoku drzewa okna Eksploratora rozwiązań .

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

Zobacz też

Zadania

Porady: kontrolowanie Eksploratora rozwiązań

Porady: zmienianie charakterystyki okna

Koncepcje

Wykres modelu obiektów automatyzacji

Inne zasoby

Tworzenie i kontrolowanie okien środowiska

Tworzenie dodatków i kreatorów

Odwołanie do automatyzacji i rozszerzalności