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