Compartir a través de


Cómo: Manipular vistas de árbol mediante UIHierarchy

Algunas ventanas de herramientas en Visual Studio, como Explorador de soluciones, no tienen objetos de automatización explícitos que puede utilizar para manipular su contenido.Sin embargo, estas ventanas de herramientas cuentan con una vista de árbol, es decir, una vista de nodos, jerárquica y de tipo esquemático, a la que se puede obtener acceso mediante programación.El objeto UIHierarchy representa las vistas de árbol de estas ventanas de herramientas y permite recorrerlas en iteración y ver el contenido de sus nodos.

Nombre de objeto

Descripción

Objeto UIHierarchy

Representa la vista de árbol en la ventana de herramientas especificada.

Colección UIHierarchyItems

Representa todos los nodos de la vista de árbol.

Objeto UIHierarchyItem

Representa un nodo de la vista de árbol.

Mediante estos objetos y colecciones, se puede:

  • Seleccionar nodos (uno o varios) y verlos en la vista de árbol.

  • Mover el punto de inserción hacia arriba o hacia abajo en la vista de árbol.

  • Devolver el valor del elemento seleccionado o hacer que ejecute la acción predeterminada.

El objeto de ToolWindows (que también se devuelve de ToolWindows) permite hacer referencia más fácil de las distintas ventanas de herramientas en Visual Studio.Por ejemplo, en lugar de utilizar _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput), ahora se puede utilizar _applicationObject.ToolWindows.OutputWindow.

[!NOTA]

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos.Estos procedimientos se han desarrollado con la Configuración de desarrollo general activa.Para cambiar la configuración, elija la opción Importar y exportarconfiguraciones del menú Herramientas.Para obtener más información, vea Valores de configuración de Visual Studio.

Ejemplo

Aunque el objeto de UIHierarchy representa el contenido de casi cualquier ventana de herramientas que tiene una vista de árbol, como Explorador de soluciones, la propia ventana de herramientas sigue siendo un objeto de Window.La propiedad UIHierarchyItems devuelve la colección de nodos de nivel superior en la ventana de herramientas especificada.En el Explorador de soluciones sólo hay un nodo de nivel superior (la solución).Por consiguiente, el nodo del proyecto para esta ventana determinada está en la colección de nodos de nivel superior en lugar de en la colección de UIHierarchyItems de la ventana.

Teniendo en cuenta esto, hay dos maneras de obtener acceso a un nodo concreto (UIHierarchyItem) en una vista de árbol:

  • Mediante el método GetItem para hacer referencia directamente al nodo deseado mediante un modelo solución/proyecto/elemento.

  • Mediante UIHierarchyItems.Item.UIHierarchyItems... (modelo colección/elemento/colección).

    Para adentrarse en el anidamiento de un nodo, bastará con utilizar este modelo.Por ejemplo, para ir a un nodo subordinado en el nodo de nivel superior, debería utilizar UIHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2).

A continuación, se muestran ejemplos sobre el modo de poner en práctica ambas técnicas para obtener acceso a un nodo de nivel inferior.

Estos ejemplos de complementos muestran cómo hacer referencia y utilizar los diversos miembros del modelo de automatización de UIHierarchy para mostrar todos los elementos Explorador de soluciones.

El primer ejemplo utiliza la estrategia del método GetItem para tener acceso al contenido del nodo References del Explorador de soluciones.Para obtener más información sobre cómo ejecutar el código de complemento, vea Cómo: Compilar y ejecutar los ejemplos de código del modelo de objetos de automatización.

[!NOTA]

El ejemplo para Explorador de soluciones envía los datos a un cuadro de mensaje.

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

El ejemplo siguiente se muestra cómo utilizar UIHierarchy para mostrar el contenido de la vista de árbol de la ventana Explorador de soluciones.

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

Vea también

Tareas

Cómo: Controlar el Explorador de soluciones

Cómo: Cambiar las características de las ventanas

Conceptos

Gráfico del modelo de objetos de automatización

Otros recursos

Crear y controlar las ventanas del entorno

Crear complementos y asistentes

Referencia de automatización y extensibilidad