Предварительная разработка элемента управления панели элементов
Примечание
Рекомендуемый способ добавлять пользовательские элементы управления в панели элементов использовать шаблоны элементов управления панели элементов, поступающие в пакет SDK Visual Studio 10.В этом разделе сведения о том, сохраняется для обеспечения обратной совместимости, для добавления существующих элементов управления в панель элементов и дополнительно разработки для элемента управления панели элементов.
Дополнительные сведения о создании управления панели элементов с помощью шаблонов см. в разделе Практическое руководство. Создание элемента управления панели элементов является использования Windows Forms и Практическое руководство. Создание элемента управления панели элементов является использования WPF.
VSPackage, основанное на управляемом пакете .NET Framework может расширять Visual Studio Функциональность панели элементов путем добавления элементов управления из объектов вывела ToolboxItem объекты. Каждое ToolboxItem реализует объект производным от Component.
Поставщик VSPackage элемента панели инструментов
VSPackage, основанное на управляемом пакете .NET Framework следует зарегистрировать в качестве поставщика элементом управления панели элементов до конца атрибуты и обработка событий Панель элементов-родственные.
Настройка VSPackage как поставщик элемента панели инструментов
Создайте экземпляр ProvideToolboxItemsAttribute применяется к реализации класса Package. Примеры.
Namespace Vsip.LoadToolboxMembers <ProvideToolboxItems(14)> _ <DefaultRegistryRoot("Software\Microsoft\VisualStudio\8.0")> _ <InstalledProductRegistration(False, "#100", "#102", "1.0", IconResourceID := 400)> _ <ProvideLoadKey("Standard", "1.0", "Package Name", "Company", 1)> _ <ProvideMenuResource(1000, 1)> _ <Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")> _ Public Class LoadToolboxMembers Inherits Package End Class End Namespace
namespace Vsip.LoadToolboxMembers { [ProvideToolboxItems(14)] [DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\8.0")] [InstalledProductRegistration(false, "#100", "#102", "1.0", IconResourceID = 400)] [ProvideLoadKey("Standard", "1.0", "Package Name", "Company", 1)] [ProvideMenuResource(1000, 1)] [Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")] public class LoadToolboxMembers : Package {
Примечание
Конструктор ProvideToolboxItemsAttribute получает номер версии целого числа в качестве аргумента.Visual Studio среда использует этот номер версии, чтобы определить, предоставляя VSPackage ToolboxItem объекты должен быть перезапущен или если кэшированные данные могут использоваться с помощью панели элементов.Гарантировать перезапустить VSPackage, a ToolboxItem то при разработке всегда увеличивает данный номер версии после любого изменения.
Если ToolboxItem объекты предоставляют нестандартные форматы буфера обмена в панели элементов экземпляр ProvideToolboxFormatAttribute применяться к реализации класса Package объект для каждого формата буфера обмена, поддерживаемого ToolboxItem объекты, VSPackage.
Дополнительные сведения о поддерживаемых форматах буфера обмена в панель элементов. Панель элементов (Visual Studio).
Примечание
Если VSPackage указывает на то, что он предоставляет все ToolboxItem объекты с нештатными форматов буфера обмена Visual Studio среда предполагается, что только те форматы, отображаемые ProvideToolboxFormatAttribute экземпляры, применяемые к VSPackage Package реализация класса поддерживается VSPackage.Если VSPackage необходимо поддерживать форматы по умолчанию, то буфера обмена, а также нестандартный формат, он должен применить экземпляр ProvideToolboxFormatAttribute для каждого формата по умолчанию, а также нестандартный формат.
Если VSPackage предоставляет динамической конфигурации ToolboxItemон:
Примените экземпляр ProvideToolboxItemConfigurationAttribute создан с помощью Type, что пакет использует для реализации IConfigureToolboxItem интерфейс.
На a public независимый класса VSPackage PackageVSPackage, должен реализовывать IConfigureToolboxItem интерфейс.
Экземпляр ProvideAssemblyFilterAttribute применяться к реализации класса IConfigureToolboxItemиспользование строку, содержащую критерий (фильтра) выделения в качестве аргумента ProvideToolboxItemConfigurationAttribute конструктор экземпляра.
Сведения о том, как уведомления Visual Studio среды, что VSPackage обеспечивает элементы управления панели элементов, cм. Регистрация функции поддержки панели элементов.
Пример иллюстрируя что может реализовать IConfigureToolboxItem поддержка см. в разделе Пошаговое руководство: Настройка конфигурации динамически ToolboxItem.
VSPackages, a ToolboxItem обработать ToolboxInitialized и ToolboxUpgraded события.
Реализуйте обработчики ToolboxInitialized и ToolboxUpgraded события:
Private Sub OnToolboxUpgraded(ByVal sender As Object, ByVal e As EventArgs) OnToolboxInitialized(send, e) End Sub Private Sub OnToolboxInitialized(ByVal sender As Object, ByVal e As EventArgs) 'Make sure all toolbox items are added. End Sub
private void OnToolboxUpgraded(object sender, EventArgs e) { OnToolboxInitialized(send,e); } private void OnToolboxInitialized(object sender, EventArgs e) { //Make sure all toolbox items are added. }
Подписки ToolboxInitialized и ToolboxUpgraded события.
Это обычно делается в Package реализация Initialize метод:
Protected Overloads Overrides Sub Initialize() AddHandler ToolboxInitialized, AddressOf OnToolboxInitialized AddHandler ToolboxUpgraded, AddressOf OnToolboxUpgraded End Sub
protected override void Initialize() { ToolboxInitialized += new EventHandler(OnToolboxInitialized); ToolboxUpgraded += new EventHandler(OnToolboxUpgraded); }
Пример, как реализовать обработчики ToolboxInitialized и ToolboxUpgraded события, см. в разделе Пошаговое руководство: элементы панели элементов автозагрузки.
Создание элемента управления панели элементов
Базовая реализация должен быть производным от элемента управления панели элементов Component и инкапсулирован в контейнер по умолчанию или производной реализации ToolboxItem объект.
Самый простой способ обеспечения a Component- производную реализацию элементов управления панели элементов посредством расширения объект, производный от Controlв частности, UserControl класс.
Создание элемента управления панели элементов
Используйте Обозреватель решений's Добавление нового элемента команда создать объект панели элементов, реализующий UserControl.
Public Partial Class ToolboxControl1 Inherits UserControl Public Sub New() InitializeComponent() End Sub Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) MsgBox("Hello world from" & Me.ToString()) End Sub Private Sub ToolboxItem1_Load(ByVal sender As Object, ByVal e As EventArgs) End Sub End Class
public partial class ToolboxControl1 : UserControl { public ToolboxControl1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Hello world from" + this.ToString()); } private void ToolboxItem1_Load(object sender, EventArgs e) { } }
Дополнительные сведения о управления Windows Forms создания и управления области элементов см. в разделе Разработка пользовательских элементов управления Windows Forms в .NET Framework OR Пошаговое руководство: элементы панели элементов автозагрузки.
(Необязательно) приложение может выбрать для использования пользовательского объекта, производного от ToolboxItem объект для реализации его элемент управления панели элементов Панель элементов.
Примечание
Любой класс, производный от ToolboxItem объект должен иметь экземпляр SerializableAttribute при применении к нему.
Пользовательская реализация производная от ToolboxItem приложение может расширить путем предоставления больших элемента управления над как ToolboxItem сериализованные данные, увеличили обработки метаданных конструктора, поддержку для нестандартных форматов буфера обмена и функциональность, позволяющую осуществлять взаимодействие с пользователем.
В этом примере пользователям предлагается диалоговым окном выбор функции:
<ToolboxItemAttribute(GetType(CustomControl))> _ <Serializable()> _ Class CustomControl Inherits ToolboxItem Public Sub New(ByVal type As Type) MyBase.New(GetType(CustomControl)) End Sub Public Sub New(ByVal type As Type, ByVal icon As Bitmap) MyBase.New(GetType(SCustomControl)) Me.DisplayName = "CustomContorl" Me.Bitmap = icon End Sub Private Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext) Deserialize(info, context) End Sub Protected Overloads Overrides Function CreateComponentsCore(ByVal host As IDesignerHost) As IComponent() Dim dialog As New CustomControlDialog(host) Dim dialogResult__1 As DialogResult = dialog.ShowDialog() If dialogResult__1 = DialogResult.OK Then Dim component As IComponent = DirectCast(dialog.CustomInstance, IComponent) Dim container As IContainer = host.Container container.Add(component) Return New IComponent() {component} Else Return New IComponent() {} End If End Function End Class
[ToolboxItemAttribute(typeof(CustomControl))] [Serializable] class CustomControl : ToolboxItem { public CustomControl(Type type) : base(typeof(CustomControl)) {} public CustomControl(Type type, Bitmap icon) : base(typeof(SCustomControl)) { this.DisplayName = "CustomContorl"; this.Bitmap = icon; } private CustomControl(SerializationInfo info, StreamingContext context) { Deserialize(info, context); } protected override IComponent[] CreateComponentsCore(IDesignerHost host) { CustomControlDialog dialog = new CustomControlDialog(host); DialogResult dialogResult = dialog.ShowDialog(); if (dialogResult == DialogResult.OK) { IComponent component = (IComponent)dialog.CustomInstance; IContainer container = host.Container; container.Add(component); return new IComponent[] { component }; } else { return new IComponent[] {}; } } }
Примечание
Также возможно для класса, производного от ToolboxItem объект для выполнения своей неуправляемой реализации базового элемента управления.Затем этот класс отвечает за создание и указав все основные компоненты.
Явное добавление элементов панели инструментов
В панели элементов элемент управления должен содержаться в экземпляре ToolboxItem или объекта, производного от ToolboxItem затем добавьте Панель элементов использование IToolboxService интерфейс.
Инкапсуляция и добавить элементы управления панели элементов
Инкапсуляция Component реализация в экземпляре a ToolboxItem объект или a ToolboxItemпроизводный объект, вызвав этот объект Initialize метод с компонентом реализации Type.
Dim customItem As New ToolboxItem() If customItem IsNot Nothing Then customItem.Initialize(userControl) End If
ToolboxItem customItem = new ToolboxItem() ; if (customItem != null) { customItem.Initialize(userControl); }
Выше примере объекта userControl является производным от UserControl (экземпляр ToolboxControl1 для использования объектом показанных выше) для построения новой ToolboxItem.
Примечание
Реализация по умолчанию ToolboxItem конструктор, принимающая a Type аргумент (#ctor(Type) конструктор вызывает ToolboxItem объект Initialize метод.
Используйте службу панели элементов (IToolboxServiceдобавление) ToolboxItem объект, созданный из базовой реализации элемента управления.
В примере, приведенном ниже, получить доступ к службе панели элементов, некоторые из свойств ToolboxItem экземпляр customItem набор, а затем customItem добавляет к Панель элементов.
Dim toolboxService As IToolboxService = TryCast(GetService(GetType(IToolboxService)), IToolboxService) customItem.Bitmap = New System.Drawing.Bitmap(ToolBoxControl1, "Control1.bmp") customItem.DisplayName = "Custom Item" toolboxService.AddToolboxItem(item, "Custom Tab")
IToolboxService toolboxService = GetService(typeof(IToolboxService)) as IToolboxService; customItem.Bitmap = new System.Drawing.Bitmap(ToolboxControl1,"Control1.bmp"); customItem.DisplayName= "Custom Item"; toolboxService.AddToolboxItem(item, "Custom Tab");
Использование отражения для добавления элемента управления панели элементов
Применение атрибутов к классу, реализующему позволяет элемент управления панели элементов Visual Studio среду или a SDK для Visual Studio приложение автоматически на основе использовать отражение для обнаружения и правильно добавление элементов управления Панель элементов.
Отражение и применения атрибутов к элементам управления панели элементов
Определите все используемые объекты к элементам управления в панели элементов с экземплярами реализации ToolboxItemAttribute.
Тип экземпляра ToolboxItemAttribute на странице будет ли объект определяет, а также a ToolboxItem создает из него.
Применение экземпляр ToolboxItemAttribute построено с a BOOLEAN значение false к объекту этот объект делает недоступным в панели элементов с помощью отражения.
Это может пригодиться для выявления объект, например, a UserControl от Панель элементов во время разработки.
Применение экземпляр ToolboxItemAttribute построено с a BOOLEAN значение true объект делает доступными объекта, что в панели элементов с помощью отражения и требует, чтобы объект был добавлен в панели элементов с помощью значение по умолчанию ToolboxItem объект.
Применение экземпляр ToolboxItemAttribute создан с помощью Type пользовательские, производного от объекта ToolboxItem делает доступным объекта в Панель элементов через отражение и требует, чтобы объект был добавлен в панели элементов с помощью этот пользовательский объект, производный от ToolboxItem.
Определите (к Visual Studio механизм отражения среды) растровое изображение, используемое для отображения элемента управления панели элементов Панель элементов путем добавления экземпляр ToolboxBitmapAttribute в реализации элемента управления панели элементов.
Если требуется применить экземпляров ToolboxItemFilterAttribute В ToolboxItem объекты к отражению использования статически для пометки их для использования с объектами, имеющими соответствующий атрибут.
В примере, приведенном ниже, реализация которого экземпляр элемента управления панели элементов ProvideAssemblyFilterAttribute при применении к нему, что делает его доступным элемента управления Панель элементов, только если текущий рабочий документ a UserControl конструкторы
<ToolboxItemFilter(System.Windows.Forms.UserControl, ToolboxItemFilterType.Require)> _ <SerializableAttribute()> _ <GuidAttribute("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")> _ Friend Class CustomToolboxItem Inherits ToolboxItem End Class
[ToolboxItemFilter(System.Windows.Forms.UserControl,ToolboxItemFilterType.Require)] [SerializableAttribute()] //ToolboxItem implementations much has this attribute. [GuidAttribute("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")] internal class CustomToolboxItem : ToolboxItem
3 Основных метода для использования отражения для autoloading ToolboxItem.
С помощью ToolService для получения управления панели элементов
ToolboxService предоставляет VSPackages со статическим GetToolboxItems методы, которые используют отражение для просмотра сборки для всех типов, которые поддерживают элементов панели инструментов, и возвращает элементы для этих типов. Возвращается элемент панели инструментов.
Быть открытым.
Реализуйте IComponent класс.
Не быть абстрактным.
Наличие a ToolboxItemAttribute на своем типе.
Не иметь a ToolboxItemAttribute значение false на своем типе
Не содержать универсальных параметров.
Получить список
Создайте экземпляр Assembly относится к сборке, для которой быть отсканированы ToolboxItem объекты.
Примечание
Получить экземпляр Assembly для текущей сборки, используйте статический метод GetExecutingAssembly.
Вызов GetToolboxItems, возвращая ICollection объект, содержащий список соответствующих объектов.
Примечание
Если объект, возвращаемый ICollection содержит допустимый экземпляр ToolboxBitmapAttribute присвоенное своей реализации GetToolboxItems метод установит ToolboxItem объект Bitmap свойство.
Используйте GetService получить доступ к IToolboxServiceи используйте его AddToolboxItem метод, чтобы добавить элементы из возвращенное ICollection объект в область элементов.
Код под запросами работающее приложение и возвращает список всех его ToolboxItem объекты и загружают их. Это пример иллюстрируя в выполняющемся коде см. в разделе Initialization метод in Пошаговое руководство: Настройка конфигурации динамически ToolboxItem.
Protected ToolboxItemList As ICollection = Nothing ToolboxItemList = ToolboxService.GetToolboxItems(Assembly.GetExecutingAssembly(), "") If ToolboxItemList Is Nothing Then Throw New ApplicationException("Unable to generate a toolbox Items listing for " & [GetType]().FullName) End If Dim toolboxService As IToolboxService = TryCast(GetService(GetType(IToolboxService)), IToolboxService) For Each itemFromList As ToolboxItem In ToolboxItemList toolboxService.AddToolboxItem(itemFromList, CategoryTab) Next
protected ICollection ToolboxItemList = null; ToolboxItemList = ToolboxService.GetToolboxItems(Assembly.GetExecutingAssembly(), ""); if (ToolboxItemList == null){ throw new ApplicationException("Unable to generate a toolbox Items listing for " + GetType().FullName); } IToolboxService toolboxService = GetService(typeof(IToolboxService)) as IToolboxService; foreach (ToolboxItem itemFromList in ToolboxItemList){ toolboxService.AddToolboxItem(itemFromList, CategoryTab); }
Использование внедренных ресурсов текста к элементам управления в панели элементов Autoload
Ресурс текста в сборке, содержащий правильно отформатированный список элементов управления панели элементов можно использовать by ParseToolboxResource автоматически загружать элемент управления панели элементов если правильно отформатирован.
Ресурс текст, содержащий список объектов к загрузке должен быть доступен в сборке, доступной в VSPackage.
Добавление текста и сделать доступными ресурс в сборку
IN Обозреватель решенийщелкните правой кнопкой мыши проект.
Укажите Добавить, затем нажмите кнопку Создать элемент.
в Добавление нового элемента диалоговое окно открывается Текстовый файл и предоставьте имя.
IN Обозреватель решенийщелкните правой кнопкой мыши созданный новый текстовый файл и присвоить Действие при построении свойство значение внедренный ресурс.
Запись Панель элементов мониторинг быть загружен содержать имя класса, реализующего, имя сборки, содержащей его.
Дополнительные сведения о формате записей элементы управления панели элементов на внедренный ресурс текста см. в разделе ParseToolboxResource ссылка на страницу.
Установка пути поиска файлов размещения, содержащий сборки объекты управления в панели элементов.
ParseToolboxResourceкаталоги поиска только указанные в записи HKEY_CURRENT_USER \ программном обеспечении \ microsoft \ VisualStudio \ реестра<версия>\ AssemblyFolders, где <версия> номер версии выпуска Visual Studio (например, 8,0).
Примечание
Путь корня HKEY_LOCAL_MACHINE \ software \ microsoft \ VisualStudio \<Версия> может быть переопределен с корнем если оболочка инициализации или использованием Visual Studio DefaultRegistryRootAttribute.Дополнительные сведения см. в разделе Параметры командной строки (SDK для Visual Studio).
Дополнительные сведения о правильном формате записей реестра AssemblyFolder см. в разделе ParseToolboxResource ссылка на страницу.
Получение экземпляра Synchronized доступ к внедренный ресурс текст, и, если требуется поддержка локализации для имен категорий, экземпляр ResourceManagerи используйте эти для вызова ParseToolboxResource метод.
Dim rm As New ResourceManager("TbxCategories", Assembly.GetExecutingAssembly()) Dim toolboxStream As Stream = TbxItemProvider.[GetType]().Assembly.GetManifestResourceStream("ToolboxItems.txt") If toolboxStream IsNot Nothing Then Using reader As TextReader = New StreamReader(toolboxStream) ParseToolboxResource(reader, rm) End Using End If
ResourceManager rm = new ResourceManager("TbxCategories", Assembly.GetExecutingAssembly()); Stream toolboxStream = TbxItemProvider.GetType().Assembly.GetManifestResourceStream("ToolboxItems.txt"); if (toolboxStream != null) { using (TextReader reader = new StreamReader(toolboxStream)) { ParseToolboxResource(reader, rm); } }
В приведенном выше примере списка, содержащегося во внедренном ресурсе текста в сборку, содержащую класс TbxItemProvider передает в ParseToolboxResource вместе с TbxCategories строковые ресурсы.
Метод осуществляет поиск всех файлов, содержащих сборки в каталогах, указанных в записи реестра AssemblyFolders для перечисленных элементов управления панели элементов в ресурсе и загрузки их.
Примечание
Если элемент управления панели элементов, найденных by ParseToolboxResource содержит допустимый экземпляр ToolboxBitmapAttribute присвоенное своей реализации ParseToolboxResource установит растровое изображение, используемое для отображения элемента управления панели элементов.
Явно с помощью отражения к элементам управления в панели элементов Autoload
При необходимости явно запросить сборки сведения о Панель элементов элементы управления, которые они содержат, а не задачу в делегирующ GetToolboxItemsэто можно сделать.
Явно использовать отражение к элементам управления в панели элементов autoload
Создайте экземпляр Assemblyв каждой сборке, ссылающся которой быть отсканированы, ToolboxItem объекты.
Примечание
Получить экземпляр Assembly для текущей сборки, используйте статический метод GetExecutingAssembly.
Для каждой сборки для просмотра, используйте Assembly объект GetTypes метод, чтобы получить список каждого Type в сборке.
Убедитесь, что тип не является абстрактным и не поддерживается IComponent интерфейс (все реализации элементов управления панели элементов, используемых для создания a ToolboxItem объект должен реализовывать этот интерфейс).
Получает атрибуты Type и использовать эти сведения для определения, желает загрузки VSPackage объект.
Примечание
Хотя в субъекта можно создать a ToolboxItem объект IComponent реализация интерфейса без экземпляра ToolboxItemAttribute не устанавливайте значение false при применении к нему, не рекомендуется.
Используйте GetConstructor для получения конструкторы ToolboxItem объекты, которые требуется отслеживать панель элементов.
Построение ToolboxItem объекты и добавить их к Панель элементов.
Чтобы увидеть, что примере проиллюстрировал явное использование отражения получать и элементов управления панели элементов autoload см. в разделе CreateItemList описано в пределах Пошаговое руководство: элементы панели элементов автозагрузки.
Дополнительная конфигурация элемента управления панели элементов
VSPackage дополнительный элемент управления может работать над, когда и как элемент управления области элементов перечислены Панель элементовпутем реализации IConfigureToolboxItemи использование ProvideAssemblyFilterAttributeи ProvideToolboxItemConfigurationAttribute.
Применить ToolboxItemFilterAttribute экземпляры класса содержат только статический элемент управления над, когда и как a Панель элементов элемент управления доступен.
Создания динамической поддержки конфигурации для элементов управления панели элементов
Постройте реализация класса IConfigureToolboxItem интерфейс как часть VSPackage.
Примечание
IConfigureToolboxItem интерфейс должен быть реализован на одном и том же классе, предоставляет реализацию VSPackage Package.
Свяжите реализация IConfigureToolboxItem с объектами в отдельных сборках, применяя экземпляр ProvideAssemblyFilterAttribute на него.
Пример в поставками динамическая конфигурация сборки управляющих объектов панели элементов в рамках Vsip.* пространство имен и требование от того, уверенного ToolboxItem объекты отображаются только с UserControl- на основе конструкторы и другие без видимых с UserControl- на основе конструкторы.
<ProvideAssemblyFilterAttribute("Vsip.*, Version=*, Culture=*, PublicKeyToken=*")> _ <GuidAttribute("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")> _ Public NotInheritable Class ToolboxConfig Implements IConfigureToolboxItem Public Sub New() End Sub ''' <summary> ''' Adds extra configuration information to this toolbox item. ''' </summary> Public Sub ConfigureToolboxItem(ByVal item As ToolboxItem) If item Is Nothing Then Exit Sub End If 'hide from .NET Compact Framework on the device designer. Dim newFilter As ToolboxItemFilterAttribute = Nothing If item.TypeName = GetType(ToolboxControl1).ToString() Then newFilter = New ToolboxItemFilterAttribute("System.Windows.Forms.UserControl", ToolboxItemFilterType.Require) ElseIf item.TypeName = GetType(ToolboxControl2).ToString() Then newFilter = New ToolboxItemFilterAttribute("System.Windows.Forms.UserControl", ToolboxItemFilterType.Prevent) End If If newFilter IsNot Nothing Then Dim array As New ArrayList() array.Add(newFilter) item.Filter = DirectCast(array.ToArray(GetType(ToolboxItemFilterAttribute)), ToolboxItemFilterAttribute()) End If End Sub End Class
[ProvideAssemblyFilterAttribute("Vsip.*, Version=*, Culture=*, PublicKeyToken=*")] [GuidAttribute("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")] public sealed class ToolboxConfig : IConfigureToolboxItem { public ToolboxConfig() { } /// <summary> /// Adds extra configuration information to this toolbox item. /// </summary> public void ConfigureToolboxItem(ToolboxItem item) { if (item == null) return; //hide from .NET Compact Framework on the device designer. ToolboxItemFilterAttribute newFilter = null; if (item.TypeName == typeof(ToolboxControl1).ToString()) { newFilter = new ToolboxItemFilterAttribute("System.Windows.Forms.UserControl", ToolboxItemFilterType.Require); } else if (item.TypeName == typeof(ToolboxControl2).ToString()) { newFilter = new ToolboxItemFilterAttribute("System.Windows.Forms.UserControl", ToolboxItemFilterType.Prevent); } if (newFilter != null) { ArrayList array = new ArrayList(); array.Add(newFilter); item.Filter = (ToolboxItemFilterAttribute[]) array.ToArray(typeof(ToolboxItemFilterAttribute)); } } } }
Зарегистрируйте VSPackage, как предоставления деталей реализации IConfigureToolboxItem применяя экземпляр ProvideToolboxItemConfigurationAttribute в реализации VSPackage Package.
В приведенном ниже примере, получаемыми бы Visual Studio среды, которые пакет по реализации Vsip.ItemConfiguration.ItemConfiguration предоставляет класс Vsip.ItemConfiguration.ToolboxConfiguration для поддержки динамического ToolboxItem.
<ProvideToolboxItemsAttribute(3)> _ <DefaultRegistryRoot("Software\Microsoft\VisualStudio\8.0")> _ <InstalledProductRegistration(False, "#100", "#102", "1.0", IconResourceID := 400)> _ <ProvideLoadKey("Standard", "1.0", "Package Name", "Company", 1)> _ <ProvideMenuResource(1000, 1)> _ <ProvideToolboxItemConfigurationAttribute(GetType(ToolboxConfig))> _ <GuidAttribute("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")> _ Public Class ItemConfiguration Inherits Package End Class
[ProvideToolboxItemsAttribute(3)] [DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\8.0")] [InstalledProductRegistration(false, "#100", "#102", "1.0", IconResourceID = 400)] [ProvideLoadKey("Standard", "1.0", "Package Name", "Company", 1)] [ProvideMenuResource(1000, 1)] [ProvideToolboxItemConfigurationAttribute(typeof(ToolboxConfig))] [GuidAttribute("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")] public class ItemConfiguration : Package
Настраиваемая поддержка перетаскивания
Помимо быть добавлен к Панель элементов сама, ToolboxItem объекты и их реализации можно использовать для расширения поддержки перетаскивания в Visual Studio интегрированная среда разработки. Это может разрешить произвольные форматов буфера обмена, предоставляемый в Панель элементов а в редакторах.
VSPackages, основанный на управляемом пакете .NET Framework следует зарегистрировать в качестве защита пользовательский интерфейс Панель элементов формат буфера обмена элемента, применяя экземпляр ProvideToolboxFormatAttribute реализации класса Package.
Дополнительные сведения о регистрации в качестве a Панель элементов поставщик см. в разделе Регистрация функции поддержки панели элементов.
Предоставить пользовательские форматы буфера обмена и поддержки перетаскивания с элементами управления панели элементов
Создайте реализация ToolboxItemCreatorCallback делегат.
Эта реализация должна вернуть a ToolboxItem объект, поддерживающий нестандартный формат буфера обмена.
Для реализации примера a ToolboxItemCreatorCallback делегат, cм. ToolboxItem и ToolboxItemCreatorCallback страницы, ссылки.
Выполните эту реализацию ToolboxItemCreatorCallback доступ к делегируйте Visual Studio Панель элементов для нештатной области элементов путем вызова AddCreator.
<GuidAttribute("7D91995B-A799-485e-BFC7-C52545DFB5DD")> _ <ProvideToolboxFormatAttribute("MyFormat")> _ Public Class ItemConfiguration Inherits MSVSIP.Package Public Overloads Overrides Sub Initialize() '"Adding this class as a ToolboxItemCreator"); Dim toolbox As IToolboxService = DirectCast(host.GetService(GetType(IToolboxService)), IToolboxService) If toolbox IsNot Nothing Then toolboxCreator = New ToolboxItemCreatorCallback(Me.OnCreateToolboxItem) toolbox.AddCreator(toolboxCreator, "MyFormat", host) End If End Sub End Class
[GuidAttribute("7D91995B-A799-485e-BFC7-C52545DFB5DD")] [ProvideToolboxFormatAttribute("MyFormat")] public class ItemConfiguration : MSVSIP.Package { public override void Initialize() { /* */ //"Adding this class as a ToolboxItemCreator"); IToolboxService toolbox = (IToolboxService)host.GetService(typeof(IToolboxService)); if (toolbox != null) { toolboxCreator = new ToolboxItemCreatorCallback(this.OnCreateToolboxItem); toolbox.AddCreator(toolboxCreator, "MyFormat", host); } private ToolboxItem OnCreateToolboxItem(object serializedData, string format) { /* */ } } }
Содержание
Практическое руководство. Функциональные возможности поддержки перетаскивания панели элементов
Описывает, как реализовать поддержку перетаскивания в представлении документа.Практическое руководство. Безопасные пользовательские элементы панели элементов с помощью сборок взаимодействия
Описывает добавление новых элементов управления ActiveX и новые элементы Visual Studio Панель элементов. Эти новые элементы могут либо быть стандартный формат буфера обмена или пользовательский формат поддерживаемые VSPackage.Регистрация функции поддержки панели элементов
Описывает, как зарегистрировать VSPackage как поставщик области элементов. Также сообщает о обслуживание или использовании других функций области элементов.
См. также
Задачи
Практическое руководство. Управление панелью элементов
Основные понятия
Регистрация функции поддержки панели элементов