Compartilhar via


Como manipular modos de exibição de árvore usando UIHierarchy

Os suplementos do Visual Studio foram substituídos no Visual Studio 2013. Você deve atualizar seus suplementos para as extensões VSPackage. Para obter mais informações sobre atualização, consulte Perguntas frequentes: convertendo suplementos em extensões VSPackage.

Algumas janelas de ferramentas do Visual Studio, como o Gerenciador de Soluções, não têm objetos de automação explícita que você possa usar para manipular conteúdo. No entanto, essas janelas de ferramenta têm um modo de exibição de árvore (isto é, um modo de exibição de nó, em estilo de estrutura de tópicos e hierárquico) que você pode acessar de modo programático. O objeto UIHierarchy representa os modos de exibição de árvore nessas janelas de ferramenta e permite que você faça iterações através delas e exiba o conteúdo de seus nós.

Nome do objeto

Descrição

Objeto UIHierarchy

Representa o modo de exibição de árvore na janela da ferramenta especificada.

Coleção UIHierarchyItems

Representa todos os nós no modo de exibição de árvore.

Objeto UIHierarchyItem

Representa um único nó no modo de exibição de árvore.

Usando esses objetos e coleções, será possível:

  • Selecionar (um ou vários) e exibir nós no modo de exibição de árvore.

  • Mova o ponto de inserção para cima ou para baixo na árvore.

  • Retornar o valor do item selecionado ou fazer com que execute a ação padrão.

O objetoToolWindows (que também é retornado de ToolWindows) permite fazer referência de várias janelas de ferramenta no Visual Studio com mais facilidade. Por exemplo, em vez de usar_applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput), agora você pode usar _applicationObject.ToolWindows.OutputWindow.

Dica

As caixas de diálogo e os comandos de menu que você vê podem diferir das descritas no Help dependendo de suas configurações ativas ou de edição.Esses procedimentos foram desenvolvidos com as Configurações Gerais de Desenvolvimento ativas.Para alterar as configurações, escolha Importar e ExportarConfigurações no menu de Ferramentas.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.

Exemplo

Embora o objeto UIHierarchy represente o conteúdo de praticamente todas as janelas de ferramentas que tem um modo de exibição de árvore, como Gerenciador de Soluções, a própria janela de ferramentas ainda é um objeto Window. A propriedade UIHierarchyItems retorna a coleção de nós de nível superior na janela de ferramentas especificada. No Gerenciador de Soluções, há apenas um único nó de nível superior (a solução). Portanto, o nó de projeto dessa janela específica está na coleção de nó de nível superior em vez de da coleção de UIHierarchyItems da janela.

Com isso em mente, há duas maneiras de acessar um nó específico (UIHierarchyItem) em uma exibição de árvore:

  • Usando o método GetItem para fazer referência direta ao nó desejado usando um padrão de solução/projeto/item.

  • Usando UIHierarchyItems.Item.UIHierarchyItems... (um padrão de coleção/item/coleção).

    Para navegar mais profundamente em um aninhamento de nós, basta continuar usando esse padrão. Por exemplo, para ir para um subordinado do nó para o nó de nível superior, você usaria UIHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2).

Os exemplos de como usar ambas as técnicas para acessar um nó de baixo nível são demonstrados nos exemplos abaixo.

Esses exemplos de suplemento demonstram como fazer referência e usar os vários membros do modelo de automação UIHierarchy para listar todos os itens no Gerenciador de Soluções.

O primeiro exemplo usa a estratégia de método GetItem de acesso ao conteúdo do nó Referências no Gerenciador de Soluções. Para obter mais informações sobre como executar o código do suplemento, consulte Como compilar e executar os exemplos de código do modelo de objeto Automation.

Dica

O exemplo para o Gerenciador de Soluções envia os dados a uma caixa de mensagem.

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

O exemplo a seguir ilustra como usar UIHierarchy para listar o conteúdo do modo de exibição de árvore da janela do Gerenciador de Soluções.

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

Consulte também

Tarefas

Como controlar o Gerenciador de Soluções

Como alterar características da janela

Conceitos

Gráfico do modelo de objetos automation

Outros recursos

Criando e controlando janelas de ambiente

Criando suplementos e assistentes

Referência sobre automação e extensibilidade