Панель команд — это панель меню или панель инструментов; с точки зрения объектной модели они представлены объектами CommandBar. Поскольку панели меню и панели инструментов находятся в окне, то вы ссылаетесь на конкретные объекты CommandBar через объект Window (при помощи свойства Window.CommandBars). В бвою очередь, каждыР CommandBar размещает внутри себя такие элементы управления, как кнопки и выпадающие списки. На рис. 11.5 показано окно Solution Explorer с выделенной командной панелью.
Обратите внимание, что на панели команд находится шесть кнопок.
Примечание
В отличие от коллекции windows, которая содержит только экземпляры всех откры тых окон, коллекция CommandBars содержит экземпляры всех зарегистрированны) панелей команд, независимо от того, показана ли в данный момент эта панель в окне.
Код на языке Visual Basic в листинге 11.9 запрашивает объект CommandBar для окнг Solution Explorer и выводит те объекты CommandBar, которые находит.
Imports EnvDTE Imports EnvDTE80
Imports Microsoft.VisualStudio.CommandBars Imports System.Diagnostics Imports System.Windows.Forms
Public Module MacroExamples Public Sub QueryCommandBar()
Dim windows As Windows2 = DTE.Windows
' Получить ссылку на Solution Explorer Dim solExplorer As Window2 = _
windows.Item(Constants.vsWindowKindSolutionExplorer)
' Получить объект панели команд для Solution Explorer .
Dim cmdBar As CommandBar = CType(solExplorer.CommandBars(1), CommandBar)
' Начинаем создавать выходную строку
Dim output As String = "Command bar contains: " + vbCrLf
* Получить ссылку на элементы управления внутри панели управления Dim controls As CommandBarControls = cmdBar.Controls
' Целочисленный счетчик Dim i As Integer = 1
' Перебрать элементы управления в панели команд For Each control As CommandBarControl In controls If control.Enabled Then
output = output + i.ToStringO + " " + control.Type.ToString() + _
": " + control.Caption + vbCrLf
i = i + 1 End If Next
MessageBox.Show(output, "Solution Explorer Command Bar", _
MessageBoxButtons.OK)
End Sub End Module
Сопоставьте результаты рис. 11.6 и 11.4: в окне инструментов видны четыре кнопки, а код обнаружил в коллекции CommandBarControls шесть элементов (они были возвращены при
помощи свойства CommandBar. Controls). Удалив следующую проверку свойства Enabled, мы получим гораздо больше элементов управления в окне сообщения:
If control.Enabled Then
Обратите внимание, что в листинге 11.9 вы должны явным образом приводить тип возвращенного из свойства Window.CommandBars объекта. Интересно, что это не строго типизированное свойство, и оно возвращает Object вместо реального экземпляра CommandBars.
Рис. 11.6. Элементы управления, обнаруженные в панели команд
Совет
Используйте свойство CommandBar.Туре для определения, является ли панель 1 команд панелью инструментов или панелью меню. Значение MsoBarType.msoBarTypeNormal подразумевает, что панель команд— это панель инструментов, в то время как значение MsoBarType.msoBarTypeMenuBar— что это меню.
Свойства и методы объекта CommandBar описаны в табл. 11.10.
Примечание
Предыдущие версии Visual Studio фактически опирались на определение объекта CommandBar (пространство имен Microsoft.Office.Core) в сборке Microsoft Office. Visual Studio 2005 и более поздние версии имеют собственную реализацию объекта CommandBar, который определен в пространстве имен Microsoft. visualStudio. CommandBars (хотя вы по-прежнему можете найти некоторые типы, которые ведут свое обозначение от сборки MS Office — такие как различные перечисления Msoxxx).
Таблица 11.10. Члены CommandBar