Отображение окна инструмента и пользовательского элемента управления

Оценить
(0 голоса)

Поскольку вы хотите, чтобы окно инструмента создавалось и отображалось после загрузки надстройки, то вызов метода CreateToolWindow2 надо поместить в метод Connect. OnConnection. Сначала вы настраиваете локальный объект, чтобы он указывал на коллекцию DTE. ToolWindows:

II   Коллекция DTE.ToolWindows

Windows2 toolWindows= (Windows2)_applicationObject.Windows;

Затем вам нужен объект, в котором будет храниться ссылка на создаваемое вами окно инст­румента:

// Объект для ссылки на создаваемое окно инструмента Window2 toolWindow;

И наконец, вам нужно создать параметры, необходимые для метода CreateToolWindow2:

// Объект указателя места заполнения; в конечном итоге будет ссылаться //на пользовательский элемент управления object paletteObject = null;

// Данный раздел указывает путь и имя класса для элемента управления // "палитра", который будет находиться в новом окне инструмента;

// нам нужно также указать его заголовок и уникальный GUID.

Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); string assemblyPath = asm.Location;

string className = "ColorSelectorAddln.PaletteControl"; string guid = M{62175059-FD7E-407a-9EF3-5D07F2B704E8}"; string caption = "Palette Color Picker";

Обратите внимание, что мы жестко закодировали идентификатор GUID для передачи в ме­тод CreateToolWindow2. Поскольку наш пользовательский элемент управления — это эле­мент управления на управляемом коде и его работа будет обеспечиваться "родным" СОМ- компонентом (все окна инструментов в Visual Studio основаны на СОМ), то инфраструктуре надстройки нужен какой-то способ установить интерфейс вызова для элемента управления. Это делается при помощи использования параметра GUID. Нам также будет нужно "поме­тить" пользовательский элемент управления идентификатором GU1D (посредством разме­щения атрибута Guid непосредственно перед объявлением нашего класса PaletteControl):

namespace ColorSelectorAddln {

[Guid("62175059-FD7E-407a-9EF3-5D07F2B704E8")] public partial class PaletteControl : UserControl { ... }

} -

Вы можете использовать Visual Studio для генерирования вашего GUID (при помощи выбо­ра меню Tools | Create GUID | Registry Format). Вы можете затем напрямую скопировать и вставить это в ваше окно с кодом.

Теперь вы всего лишь в нескольких строках кода от создания и отображения окна инстру­мента:

// Создать новое окно инструмента с вложенным пользовательским // элементом управления 1

toolWindow = (Window2)toolWindows.CreateToolWindow2(_addlnlnstance,

assemblyPath, className, caption, guid, ref paletteObject);

// Если окно инструмента было создано успешно, сделать его видимым if (toolWindow != null)

{

toolWindow.Visible = true;

}

Перехват событий пользовательских элементов управления  <

Надстройке не хватает только одного: вам нужно реагировать на щелчок пользователя по палитре. Для этого надо взять сгенерированный код (доступный через свойство PaletteControl .Code) и вставить его в текущий активный документ. При этом есть две задачи. Сначала вам нужно написать обработчик события, для работы с событием щелчка, генерируемым объектом PaletteControl. Но для этого вам нужна ссылка на пользова­тельский элемент управления. Это— цель объекта paletteObject, который вы передаете как последний параметр методу CreateToolWindow2. Поскольку он передается по ссылке, то (после завершения метода и возвращения из него) он будет содержать экземпляр PaletteControl. Затем вы можете привести тип этого объекта к типу PaletteControl, присвоить его полю внутри класса Connect и прикрепить обработчик события к событию PaletteControl.ColorSelected:

// Получить ссылку на наш объект пользовательского элемента управления _paletteControl = (PaletteControl)paletteObject;

// Подключить обработчик ошибки для события PaletteControl.ColorSelected _paletteControl.ColorSelected +=

new System.EventHandler(paletteControll_ColorSelected);

Совет

Получить ссылку на пользовательский элемент управления может быть не очень про­сто. Если пользовательский элемент управления не является частью того же самого проекта, что и класс вашей надстройки, то CreateToolwindow2 возвратит только значение null (вместо ссылки на пользовательский элемент управления). Если вы хотите разработать ваш пользовательский элемент управления вне проекта над­стройки, то вы должны убедиться, что пользовательский элемент управления полно­стью атрибутирован и видим для вызывающих COM-компонентов. Подробности того, как это делается, см. в теме "Exposing .NET Framework Components to COM" докумен­тации MSDN.

Вставка сгенерированного кода
Предоставление настроек надстройки
Регистрация страницы Options
Создание мастера для Visual Studio
Изучение структуры мастера

Добавить комментарий


Защитный код
Обновить

© 2017 www.visualstudios.ru. Все права защищены.