Пошаговое руководство: Расширение окно инструментов (часть 3 из 4)
В данном пошаговом руководстве добавляется в окно инструментов, созданное в пределах Пошаговое руководство: Создание окно инструментов (часть 2 из 4). Добавляется кнопка, которая отображает Открыть файл откроется диалоговое окно, чтобы выбрать файл для воспроизведения в медиа-проигрывателе.
В этом пошаговом руководстве показано, как добавить динамический видимость на команду меню.
В этом пошаговом руководстве один из ряда, объясняется, как расширить интегрированной среды разработки (ide) Visual Studio. Дополнительные сведения см. в разделе Пошаговые руководства по Visual Studio для настройки с помощью VSPackages.
Добавьте динамическая видимость в команде меню
По умолчанию команды меню исправлено и не может быть скрыто после того, как они отображаются. Однако конструкция в этом пошаговом руководстве, что пакет выбирает во время выполнения, должна ли команда отображаться в зависимости от того, является ли окно инструментов медиа-проигрывателя активно.
Сначала необходимо изменить FirstToolWin.vsct, чтобы включить видимость, а затем реализовать динамическую логику для установки видимости в коде. Создается класс, чтобы сохранить события окна инструментов, а затем изменить пакет, чтобы сделать объект команды меню, а затем связываете их вместе.
Включить динамическую " видимость "
Открытие проекта "FirstToolWin", который вы создали в пределах Пошаговое руководство: Создание окно инструментов (часть 2 из 4).
IN Обозреватель решенийвыберите команду открыть FirstToolWin.vsct.
Найдите <Button> элемент, который имеет идентификатор cmdidWindowsMedia. Между <icon> определение и <Strings> раздел, добавляет 2 пометить команды следующим образом.
<CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag>
Сохраните файл.
Создание события окна инструментов
IN Обозреватель решенийщелкните правой кнопкой мыши имя проекта, выберите Добавить, а затем нажмите кнопку Класс.
в Добавление нового элемента диалоговое окно ", назовите файл ToolWindowEvents.cs OR ToolWindowEvents.vb затем перейдите Добавить.
Откройте ToolWindowEvents.cs или ToolWindowEvents.vb и добавьте следующий код после any существовать using OR Imports выписки.
Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports Microsoft.VisualStudio.Shell.Interop Imports System.ComponentModel.Design Imports System.Security.Permissions
using Microsoft.VisualStudio.Shell.Interop; using System.ComponentModel.Design; using System.Security.Permissions;
Измените объявление класса, чтобы оно будет public и sealed(Public и NotInheritable в Visual Basic) и наследует IVsWindowFrameNotify3 интерфейс следующим образом.
Public NotInheritable Class ToolWindowEvents Implements IVsWindowFrameNotify3
public sealed class ToolWindowEvents : IVsWindowFrameNotify3
Если используется c#, щелкните правой кнопкой мыши, выберите пункт IVsWindowFrameNotify3 Реализовать интерфейс, а затем нажмите кнопку Реализовать интерфейс автоматическое добавление методы, которые требуются для интерфейса.
Если используется Visual Basic, пропустите этот шаг.
Реализуйте OnShow метод следующим образом.
Public Function OnShow(ByVal fShow As Integer) As Integer Implements VisualStudio.Shell.Interop.IVsWindowFrameNotify3.OnShow If Not fShow = __FRAMESHOW.FRAMESHOW_WinHidden Then package.toolMenuItem1.visible = True End If Return Microsoft.VisualStudio.VSConstants.S_OK End Function
[PrincipalPermission(SecurityAction.Demand)] public int OnShow(int fShow) { package.toolMenuItem1.Visible = ((__FRAMESHOW)fShow != __FRAMESHOW.FRAMESHOW_WinHidden); return Microsoft.VisualStudio.VSConstants.S_OK; }
Заполните содержимое оставшихся IVsWindowFrameNotify3 члены интерфейса с помощью следующей возвращенной выписки.
Return Microsoft.VisualStudio.VSConstants.S_OK
return Microsoft.VisualStudio.VSConstants.S_OK;
Предупреждение
В c# члены интерфейса будут заполнены с throw выписки, которые необходимо перезаписать.В Visual Basic функции опорожнят.
Добавленный код объявляет класс, который будет получать события для окна инструментов. Событие, используемое здесь OnShow, в котором видимость команды меню набор, основанный на значении, который передается в событие. Значение, передаваемое в перечисление типа __FRAMESHOW. Хотя это перечисление содержит ряд возможных значений, в этом случае необходимо протестировать ли оно равно FRAMESHOW_WinHidden. Если оно не задано, то видимый равен true. Если он равен имеет видимый значение false.
Однако обратите внимание, что в этом коде используется переменная с именем "pack". Эта переменная передается в конструктор.
Добавьте следующий код в начало класса, над областью, где IVsWindowFrameNotify3 члены интерфейса.
Private package As FirstToolWinPackage Public Sub New(ByVal apackage As FirstToolWinPackage) package = apackage End Sub
private FirstToolWinPackage package; public ToolWindowEvents(FirstToolWinPackage apackage) { package = apackage; }
Значение, переданное в конструктор экземпляр FirstToolWin сам пакет. В событии OnShow команда меню необходимо получить доступ. По умолчанию эта команда меню локально области переменной в методе инициализации пакета.
Сохраните файл.
Доступ к команда меню
IN Обозреватель решенийоткрыть FirstToolWinPackage.cs или FirstToolWinPackage.vb, чтобы можно было изменять класс FirstToolWin, чтобы сделать объект команды меню.
Declare a MenuCommand объект в верхней части класса для представления команду меню.
Public toolMenuItem1 As MenuCommand
public MenuCommand toolMenuItem1;
Перейдите к методу инициализации. Найдите следующие 2 линий, создают первая команда.
Dim menuItem As New MenuCommand(New EventHandler(AddressOf MenuItemCallback), menuCommandID) mcs.AddCommand(menuItem)
MenuCommand menuItem = new MenuCommand(MenuItemCallback, menuCommandID); mcs.AddCommand(menuItem);
Замените значение по умолчанию MenuCommand объект с помощью общей переменной, объявленное ранее.
Dim toolMenuItem1 As New MenuCommand(New EventHandler(AddressOf MenuItemCallback), menuCommandID) mcs.AddCommand(toolMenuItem1)
toolMenuItem1 = new MenuCommand(MenuItemCallback, menuCommandID); mcs.AddCommand(toolMenuItem1);
Сохраните файл.
Далее предстоит создать экземпляр окна инструментов, а также экземпляр созданного класса для получения события. Затем можно вложить экземпляр класса к экземпляру окна инструментов.
Вложение события
IN Обозреватель решенийоткрыть MyToolWindow.cs или MyToolWindow.vb. Переопределите метод OnToolWindowCreated, добавив следующий код в конце файла до заключительной расчалкой определения класса.
Public Overrides Sub OnToolWindowCreated() MyBase.OnToolWindowCreated() Dim handler As FirstToolWinPackage = CType( _ Me.Package, FirstToolWinPackage) CType(Me.Frame, IVsWindowFrame).SetProperty( _ CInt(__VSFPROPID.VSFPROPID_ViewHelper), handler) End Sub
public override void OnToolWindowCreated() { base.OnToolWindowCreated(); var handler = new ToolWindowEvents( (FirstToolWinPackage)this.Package); ((IVsWindowFrame)this.Frame).SetProperty( (int)__VSFPROPID.VSFPROPID_ViewHelper, handler); }
Этот код создает новый экземпляр класса, который был добавлен ранее. Затем он добавляет этот экземпляр к свойствам кадра, что экземпляр мог получать события. Метод SetProperty выполняет это при передаче значение перечисления VSFPROPID_ViewHelper для первого параметра и нового экземпляра обработчика для второго параметра.
Сохраните файл.
Тестирование кода
Нажмите клавишу F5, чтобы компилировать проект и выполнить его в экспериментальном построении Visual Studio.
Выберите меню Сервис.
WindowsMedia команда меню не должна появляться.
На Просмотреть меню наведите курсор на пункт Другие окна затем перейдите Проигрыватель Windows Media отобразить окно медиа-проигрывателя.
Щелкните Сервис меню.
Теперь WindowsMedia команда меню должна отображаться, поскольку она имеет динамическую видимость; то есть ли она отображается ли окно медиа-проигрывателя найденных on отображается.
Закройте окно медиа-проигрывателя а затем проверьте Сервис меню.
Теперь WindowsMedia команда меню не должна появляться.
Закройте экспериментальном построении.
Добавьте код Windows Forms для взаимодействия с окном инструментов
Теперь добавьте код в класс пакета, который реагирует на команду меню. Этот код иллюстрирует открытие Открыть файл диалоговое окно и затем вызывает новый метод LoadFile, чтобы загрузить файл в медиа-проигрывателе.
Активировать окно инструментов в коде
Откройте FirstToolWinPackage.cs.
Добавление System.Windows.Forms пространство имен сразу после существовать с помощью выписки следующим образом.
Imports System.Windows.Forms
using System.Windows.Forms;
Найдите MenuItemCallback обработчиком меню. Обработчик событий для этого выберите в команде меню. Замените текст данного обработчика меню с помощью следующего кода.
Dim openFileDialog As System.Windows.Forms.OpenFileDialog = New System.Windows.Forms.OpenFileDialog() Dim result As DialogResult = openFileDialog.ShowDialog() If (result = DialogResult.OK) Then Dim window As MyToolWindow = TryCast(Me.FindToolWindow(GetType(MyToolWindow), 0, True), MyToolWindow) If (window IsNot Nothing) Then window.LoadFile(openFileDialog.FileName) End If End If
System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog(); DialogResult result = openFileDialog.ShowDialog(); if (result == DialogResult.OK) { MyToolWindow window = (MyToolWindow)(this.FindToolWindow( typeof(MyToolWindow), 0, true)); if (window != null) { window.LoadFile(openFileDialog.FileName); } }
Сохраните результаты работы.
Этот код иллюстрирует открытие Открыть файл откроется диалоговое окно, чтобы найти файл мультимедиа, который необходимо загрузить в медиа-проигрывателе. Затем он определяет местонахождение экземпляра MyToolWindow и вызывает метод LoadFile, который был создан ранее, чтобы загрузить файл мультимедиа.
Тестирование кода
Нажмите клавишу F5, чтобы компилировать проект и выполнить его в экспериментальном экземпляре Visual Studio.
На Сервис меню выберите команду WindowsMedia.
Открыть файл диалоговое окно должно отображаться.
в Открыть файл откроется диалоговое окно выберите допустимый файл мультимедиа, а затем нажмите кнопку ОК.
Файл должен воспроизведения в медиа-проигрывателе.
Закройте экспериментальном экземпляр.
Что дальше?
В этом пошаговом руководстве показано, как добавлять команды меню, имеющих динамическую видимость. В нем также показано добавление элементов управления в окно инструментов, которые взаимодействуют с другими элементами управления в окне инструментов. Обычно эти принципы применяются к окнам инструментов. Элементы управления, добавляемые к окнам инструментов ближайшего напоминают пользовательские элементы управления, которые можно использовать в приложении Windows Forms.
В следующем пошаговом руководстве Пошаговое руководство: Интеграция с окном свойств, списком задач, окном вывода, и диалоговым окном "Параметры" (Часть 4 из 4)рассказывается, как интегрировать пользовательское окно инструментов вместе с существующими окнами инструментов в Visual Studio, например Свойства окна Вывод окно, и Список задач окна.