Como: Manipular modos de exibição de árvore usando UIHierarchy
Alguns ferramenta janelas em Visual Studio, sistema autônomo Gerenciador de Macro and O gerenciador de soluções, não possuem objetos de automação explícito que podem ser usados para manipular seu Sumário.Essas janelas de ferramenta fazer, no entanto, ter um modo de exibição de árvore — ou seja, um hierárquico, estrutura de tópicos-estilo, exibição nó — que você pode acessar programaticamente.The UIHierarchy objeto representa os modos de exibição de árvore nessas janelas de ferramenta e lhe permite fazer uma iteração através delas e exibir o Sumário de seus nós.
Nome do objeto |
Descrição |
---|---|
UIHierarchy objeto |
Representa o modo de exibição de árvore no especificado ferramenta janela. |
UIHierarchyItems coleção |
Representa todos os nós no modo de exibição de árvore. |
UIHierarchyItem objeto |
Representa um único nó na modo de exibição de árvore. |
Ao usar esses objetos e coleções, você pode:
selecionar (individualmente ou multiplicação) e exiba nós o modo de exibição de árvore.
Mova o ponto de inserção para cima ou para baixo no modo de exibição em árvore.
Retornar o valor do item selecionado ou tê-lo executar a ação padrão.
In Visual Studio 2005, o novo ToolWindows objeto (que também é retornado da ToolWindows) permite que a referência mais fácil ao várias janelas de ferramentas no Visual Studio. Por exemplo, em vez de usar _ applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput), agora você pode usar _applicationObject.ToolWindows.OutputWindow.
Observação: |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Esses procedimentos foram desenvolvidos com o Geral Development Settings ativo.Para alterar as configurações, escolher Import and ExportSettings on the Tools menu.Para obter mais informações, consulte Configurações do Visual Studio. |
Exemplo
Embora o UIHierarchy objeto representa o Sumário de praticamente qualquer ferramenta janela que tem um modo de exibição de árvore, sistema autônomo O gerenciador de soluções or Gerenciador de Macro, o ferramenta janela propriamente dito é ainda um Window objeto. The UIHierarchyItems propriedade retorna a coleção de nós de nível superior na janela de ferramentas especificada. In O gerenciador de soluções, existe apenas um único nível superior nó (a solução).In Gerenciador de Macro, também há somente um nó de nível superior (o nó de macros).Conseqüentemente, os nós de projeto para essas janelas específicos estão na coleção do nó de nível superior em vez de na UIHierarchyItems coleção.
Com isso em mente, há duas maneiras para acesso um nó específico (UIHierarchyItem) em um modo de exibição de árvore:
Usando o GetItem método para fazer referência direta no nó desejado usando um solução/projeto/item padrão.
Usando UIHierarchyItems.Item.UIHierarchyItems... (um padrão da coleção/itens/coleção).
Para navegar mais profundo no aninhamento de um nó, simplesmente continuar usando esse padrão.Por exemplo, para ir para um nó subordinado para o nó de nível superior, você usaria UIHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2).
Exemplos de como usar ambas as técnicas para acessar um nó de nível inferior são demonstrados nos exemplos abaixo.
Esses exemplos suplemento demonstram como referenciar e usar os vários membros do UIHierarchy modelo de automação para lista todos os itens em O gerenciador de soluçõese todas as macros sob o Amostras nó of Gerenciador de Macro.
O primeiro exemplo usa o GetItem estratégia de método de acessar o Sumário do nó References O gerenciador de soluções.O segundo exemplo mostra como fazer o mesmo para Gerenciador de Macro.Para obter mais informações sobre como executar o código de suplemento, consulte Como: Compilar e executar os exemplos de códigos automação objeto modelo.
Observação: |
---|
Os exemplos de código a seguir sua saída do canal de maneiras diferentes.O exemplo para O gerenciador de soluções envia seus dados para uma caixa de mensagem do Windows, enquanto o exemplo para Macros Explorer envia seus dados para o Janela de saída.Em ambos os casos é válido e tem não relação com o uso de UIHierarchy. |
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());
}
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)
ListMacroSamples1(_applicationObject)
End Sub
Sub ListMacroSamples1(ByVal dte As DTE2)
' Reference the UIHierarchy, UIHierarchyItem, and OutputWindow
' objects.
Dim UIH As UIHierarchy = CType(dte.Windows.Item _
(Constants.vsWindowKindMacroExplorer).Object, UIHierarchy)
Dim samples As UIHierarchyItem = UIH.GetItem("Macros\Samples")
Dim OWPane As OutputWindowPane = GetOutputWindowPane _
("List Macros", True)
Dim file As UIHierarchyItem
OWPane.Clear()
For Each file In samples.UIHierarchyItems
OWPane.OutputString(file.Name & _
Microsoft.VisualBasic.Constants.vbCrLf)
Dim macro As UIHierarchyItem
For Each macro In file.UIHierarchyItems
OWPane.OutputString(" " & macro.Name & _
Microsoft.VisualBasic.Constants.vbCrLf)
Next
Next
End Sub
Function GetOutputWindowPane(ByVal Name As String, Optional ByVal _
show As Boolean = True) As OutputWindowPane
' This is a support function for ListMacroSamples(). It provides
' the Output window to list the contents of the Sample node.
Dim win As Window = _applicationObject.Windows.Item _
(EnvDTE.Constants.vsWindowKindOutput)
If show Then win.Visible = True
Dim OW As OutputWindow = _applicationObject. _
ToolWindows.OutputWindow
Dim OWPane As OutputWindowPane
Try
OWPane = OW.OutputWindowPanes.Item(Name)
Catch e As System.Exception
OWPane = OW.OutputWindowPanes.Add(Name)
End Try
OWPane.Activate()
Return OWPane
End Function
public void OnConnection(object application, ext_ConnectMode
connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
ListMacroSamples1(_applicationObject);
}
public void ListMacroSamples1(DTE2 dte)
{
// Reference the UIHierarchy, UIHierarchyItem, and OutputWindow
// objects.
UIHierarchy UIH = (UIHierarchy)
dte.Windows.Item(Constants.vsWindowKindMacroExplorer).Object;
UIHierarchyItem samples = UIH.GetItem("Macros\\Samples");
OutputWindowPane OWPane = GetOutputWindowPane("List Macros", true);
OWPane.Clear();
foreach ( UIHierarchyItem fid in samples.UIHierarchyItems )
{
OWPane.OutputString(fid.Name+Environment.NewLine);
foreach ( UIHierarchyItem macro in fid.UIHierarchyItems )
{
OWPane.OutputString(" " + macro.Name +
Environment.NewLine);
}
}
}
public OutputWindowPane GetOutputWindowPane(string Name, bool show)
{
// This is a support function for ListMacroSamples(). It provides
// the Output window to list the contents of the Sample node.
Window win = _applicationObject.Windows.Item
(EnvDTE.Constants.vsWindowKindOutput);
if (show) { win.Visible = true; }
OutputWindow OW = _applicationObject.ToolWindows.OutputWindow;
OutputWindowPane OWPane;
try
{
OWPane = OW.OutputWindowPanes.Item(Name);
}
catch (System.Exception e)
{
OWPane = OW.OutputWindowPanes.Add(Name +
Environment.NewLine + e.Message);
}
OWPane.Activate();
return OWPane;
}
Este exemplo usa o UIHierarchyItems.Item.UIHierarchyItems padrão para acessar um nó em um UIHierarchy. Este exemplo lista as macros contidas dentro do segundo UIHierarchy nó do Gerenciador de Macro.Observe que este exemplo também chama a função, GetOutputWindowPane, no exemplo acima.
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)
ListMacroSamples2(_applicationObject)
End Sub
Sub ListMacroSamples2(ByVal dte As DTE2)
Dim uih As UIHierarchy = CType(dte.Windows.Item _
(Constants.vsWindowKindMacroExplorer).Object, UIHierarchy)
' Set a reference to the second node in Macro Explorer. The
' collections are one-based.
Dim uihItem As UIHierarchyItem = _
uih.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2)
Dim file As UIHierarchyItem
Dim owPane As OutputWindowPane = GetOutputWindowPane("List Macros")
For Each file In uihItem.UIHierarchyItems
owPane.OutputString(file.Name & _
Microsoft.VisualBasic.Constants.vbCrLf)
Dim macro As UIHierarchyItem
For Each macro In file.UIHierarchyItems
owPane.OutputString(" " & macro.Name & _
Microsoft.VisualBasic.Constants.vbCrLf)
Next
Next
End Sub
Function GetOutputWindowPane(ByVal Name As String, Optional ByVal _
show As Boolean = True) As OutputWindowPane
' This is a support function for ListMacroSamples(). It provides
' the Output window to list the contents of the Sample node.
Dim win As Window = _applicationObject.Windows.Item _
(EnvDTE.Constants.vsWindowKindOutput)
If show Then win.Visible = True
Dim OW As OutputWindow = _
_applicationObject.ToolWindows.OutputWindow
Dim OWPane As OutputWindowPane
Try
OWPane = OW.OutputWindowPanes.Item(Name)
Catch e As System.Exception
OWPane = OW.OutputWindowPanes.Add(Name)
End Try
OWPane.Activate()
Return OWPane
End Function
public void OnConnection(object application, ext_ConnectMode
connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
ListMacroSamples2(_applicationObject);
}
public void ListMacroSamples2(DTE2 dte)
{
UIHierarchy uih = (UIHierarchy)
dte.Windows.Item(Constants.vsWindowKindMacroExplorer).Object;
// Set a reference to the second node in Macro Explorer. The
// collections are one-based.
UIHierarchyItem uihItem =
uih.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2);
OutputWindowPane owPane = GetOutputWindowPane("List Macros", true);
foreach ( UIHierarchyItem fid in uihItem.UIHierarchyItems )
{
owPane.OutputString(fid.Name+Environment.NewLine);
foreach ( UIHierarchyItem macro in fid.UIHierarchyItems )
{
owPane.OutputString(" " + macro.Name +
Environment.NewLine);
}
}
}
public OutputWindowPane GetOutputWindowPane(string Name, bool show)
{
// This is a support function for ListMacroSamples(). It provides
// the Output window to list the contents of the Sample node.
Window win = _applicationObject.Windows.Item
(EnvDTE.Constants.vsWindowKindOutput);
if (show) { win.Visible = true; }
OutputWindow OW = _applicationObject.ToolWindows.OutputWindow;
OutputWindowPane OWPane;
try
{
OWPane = OW.OutputWindowPanes.Item(Name);
}
catch (System.Exception e)
{
OWPane = OW.OutputWindowPanes.Add(Name + Environment.NewLine +
e.Message);
}
OWPane.Activate();
return OWPane;
}
O exemplo de macro a seguir ilustra como usar UIHierarchy Para listar o Sumário da modo de exibição de árvore das O gerenciador de soluções janela.
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: Controle gerenciador de soluções
Como: Alterar características de janela
Conceitos
Gráfico do modelo de objetos de automação
Outros recursos
Criando e controlando o ambiente Windows