Практическое руководство. Управление представлениями в виде дерева с помощью объекта UIHierarchy
Надстройки Visual Studio выступан сопоставления в Visual Studio 2013. Необходимо обновить для надстройки с расширениями VSPackage. Дополнительные сведения об обновлении см. в разделе Часто задаваемые вопросы. Преобразование надстроек в расширения VSPackage.
Некоторые окна инструментов в Visual Studio, например Обозреватель решений, не имеют заданные объекты автоматизации, которые можно использовать для управления их содержимое. Однако эти окна инструментов имеют представление в виде дерева, т.е. иерархическое, структурное представление узлов, доступ к которому можно получить программными средствами. Представления в виде дерева в этих окнах инструментов представлены объектом UIHierarchy, который позволяет выполнять перебор по представлениям и просматривать содержимое их узлов.
Имя объекта |
Описание |
---|---|
Объект UIHierarchy |
Обеспечивает представление в виде дерева в заданном окне инструментов. |
Коллекция UIHierarchyItems |
Обеспечивает все узлы в представлении в виде дерева. |
Объект UIHierarchyItem |
Обеспечивает один узел в представлении в виде дерева. |
Использование этих объектов и коллекций дает возможность:
Выбирать один или несколько узлов и просматривать их в представлении в виде дерева.
Перемещать точку ввода вверх или вниз по представлению в виде дерева.
Возвращать значение выбранного элемента или заставлять его выполнять действие, заданное для него по умолчанию.
Объект ToolWindows (который также возвращается из ToolWindows) упрощает создание ссылок на различные окна инструментов в Visual Studio. Например, вместо _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput) теперь можно использовать _applicationObject.ToolWindows.OutputWindow.
Примечание
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Эти процедуры были разработаны с обычными параметрами разработки.Чтобы изменить настройки, в меню Сервис выберите команду Импорт и экспортпараметров.Для получения дополнительной информации см. Настройка параметров разработки в Visual Studio.
Пример
Хотя объект UIHierarchy представляет содержимое практически любое окно инструментов, в котором находится представление в виде дерева, например Обозреватель решений, окно инструментов само по-прежнему объект Window. Свойство UIHierarchyItems возвращает коллекцию узлов верхнего уровня указанного окна инструментов. В обозревателе решений узлом верхнего уровня является только один узел — решение. Следовательно, узел проекта для данного окна в коллекции узлов верхнего уровня, а не коллекции окна UIHierarchyItems.
Исходя из этого, существует два способа получения доступа к определенному узлу (UIHierarchyItem) в представлении в виде дерева:
При помощи метода GetItem для создания прямой ссылки на необходимый узел с помощью шаблона “решение/проект/элемент”.
С помощью UIHierarchyItems.Item.UIHierarchyItems... (шаблон “коллекция/элемент/коллекция”).
Для дальнейшего перехода по вложенным узлам используйте указанный шаблон. Например, чтобы перейти к узлу, подчиненному узлу верхнего уровня, следует использовать UIHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2).
Далее приведены примеры использования обоих методов для получения доступа к узлам нижнего уровня.
Эти примеры надстройки демонстрируют, как использовать различные члены модели автоматизации UIHierarchy, чтобы отобразить все элементы в Обозреватель решений.
В первом примере для доступа к содержимому узла “References” в обозревателе решений используется стратегия метода GetItem. Дополнительные сведения о запуске кода надстройки см. в разделе Практическое руководство. Компиляция и выполнение примеров кода модели объектов автоматизации.
Примечание
Пример для Обозреватель решений отправляет свои данные в окно сообщения.
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());
}
В следующем примере показано, как использовать UIHierarchy для перечисления в виде дерева содержимое окна Обозреватель решений.
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
См. также
Задачи
Практическое руководство. Управление обозревателем решений
Практическое руководство. Изменение параметров окон
Основные понятия
Диаграмма модели объектов автоматизации