Поделиться через


Предварительная разработка элемента управления панели элементов

Примечание

Рекомендуемый способ добавлять пользовательские элементы управления в панели элементов использовать шаблоны элементов управления панели элементов, поступающие в пакет SDK Visual Studio 10.В этом разделе сведения о том, сохраняется для обеспечения обратной совместимости, для добавления существующих элементов управления в панель элементов и дополнительно разработки для элемента управления панели элементов.

Дополнительные сведения о создании управления панели элементов с помощью шаблонов см. в разделе Практическое руководство. Создание элемента управления панели элементов является использования Windows Forms и Практическое руководство. Создание элемента управления панели элементов является использования WPF.

VSPackage, основанное на управляемом пакете .NET Framework может расширять Visual Studio Функциональность панели элементов путем добавления элементов управления из объектов вывела ToolboxItem объекты. Каждое ToolboxItem реализует объект производным от Component.

Поставщик VSPackage элемента панели инструментов

VSPackage, основанное на управляемом пакете .NET Framework следует зарегистрировать в качестве поставщика элементом управления панели элементов до конца атрибуты и обработка событий Панель элементов-родственные.

Настройка VSPackage как поставщик элемента панели инструментов

  1. Создайте экземпляр 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 то при разработке всегда увеличивает данный номер версии после любого изменения.

  2. Если ToolboxItem объекты предоставляют нестандартные форматы буфера обмена в панели элементов экземпляр ProvideToolboxFormatAttribute применяться к реализации класса Package объект для каждого формата буфера обмена, поддерживаемого ToolboxItem объекты, VSPackage.

    Дополнительные сведения о поддерживаемых форматах буфера обмена в панель элементов. Панель элементов (Visual Studio).

    Примечание

    Если VSPackage указывает на то, что он предоставляет все ToolboxItem объекты с нештатными форматов буфера обмена Visual Studio среда предполагается, что только те форматы, отображаемые ProvideToolboxFormatAttribute экземпляры, применяемые к VSPackage Package реализация класса поддерживается VSPackage.Если VSPackage необходимо поддерживать форматы по умолчанию, то буфера обмена, а также нестандартный формат, он должен применить экземпляр ProvideToolboxFormatAttribute для каждого формата по умолчанию, а также нестандартный формат.

  3. Если VSPackage предоставляет динамической конфигурации ToolboxItemон:

    1. Примените экземпляр ProvideToolboxItemConfigurationAttribute создан с помощью Type, что пакет использует для реализации IConfigureToolboxItem интерфейс.

    2. На a public независимый класса VSPackage PackageVSPackage, должен реализовывать IConfigureToolboxItem интерфейс.

      Экземпляр ProvideAssemblyFilterAttribute применяться к реализации класса IConfigureToolboxItemиспользование строку, содержащую критерий (фильтра) выделения в качестве аргумента ProvideToolboxItemConfigurationAttribute конструктор экземпляра.

Сведения о том, как уведомления Visual Studio среды, что VSPackage обеспечивает элементы управления панели элементов, cм. Регистрация функции поддержки панели элементов.

Пример иллюстрируя что может реализовать IConfigureToolboxItem поддержка см. в разделе Пошаговое руководство: Настройка конфигурации динамически ToolboxItem.

  1. VSPackages, a ToolboxItem обработать ToolboxInitialized и ToolboxUpgraded события.

    1. Реализуйте обработчики 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.
      }
      
    2. Подписки 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 класс.

Создание элемента управления панели элементов

  1. Используйте Обозреватель решений'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 Пошаговое руководство: элементы панели элементов автозагрузки.

  2. (Необязательно) приложение может выбрать для использования пользовательского объекта, производного от 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 интерфейс.

Инкапсуляция и добавить элементы управления панели элементов

  1. Инкапсуляция 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 метод.

  2. Используйте службу панели элементов (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 приложение автоматически на основе использовать отражение для обнаружения и правильно добавление элементов управления Панель элементов.

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

  1. Определите все используемые объекты к элементам управления в панели элементов с экземплярами реализации ToolboxItemAttribute.

    Тип экземпляра ToolboxItemAttribute на странице будет ли объект определяет, а также a ToolboxItem создает из него.

    1. Применение экземпляр ToolboxItemAttribute построено с a BOOLEAN значение false к объекту этот объект делает недоступным в панели элементов с помощью отражения.

      Это может пригодиться для выявления объект, например, a UserControl от Панель элементов во время разработки.

    2. Применение экземпляр ToolboxItemAttribute построено с a BOOLEAN значение true объект делает доступными объекта, что в панели элементов с помощью отражения и требует, чтобы объект был добавлен в панели элементов с помощью значение по умолчанию ToolboxItem объект.

    3. Применение экземпляр ToolboxItemAttribute создан с помощью Type пользовательские, производного от объекта ToolboxItem делает доступным объекта в Панель элементов через отражение и требует, чтобы объект был добавлен в панели элементов с помощью этот пользовательский объект, производный от ToolboxItem.

  2. Определите (к Visual Studio механизм отражения среды) растровое изображение, используемое для отображения элемента управления панели элементов Панель элементов путем добавления экземпляр ToolboxBitmapAttribute в реализации элемента управления панели элементов.

  3. Если требуется применить экземпляров 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 на своем типе

  • Не содержать универсальных параметров.

Получить список

  1. Создайте экземпляр Assembly относится к сборке, для которой быть отсканированы ToolboxItem объекты.

    Примечание

    Получить экземпляр Assembly для текущей сборки, используйте статический метод GetExecutingAssembly.

  2. Вызов GetToolboxItems, возвращая ICollection объект, содержащий список соответствующих объектов.

    Примечание

    Если объект, возвращаемый ICollection содержит допустимый экземпляр ToolboxBitmapAttribute присвоенное своей реализации GetToolboxItems метод установит ToolboxItem объект Bitmap свойство.

  3. Используйте 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.

Добавление текста и сделать доступными ресурс в сборку

  1. IN Обозреватель решенийщелкните правой кнопкой мыши проект.

  2. Укажите Добавить, затем нажмите кнопку Создать элемент.

  3. в Добавление нового элемента диалоговое окно открывается Текстовый файл и предоставьте имя.

  4. IN Обозреватель решенийщелкните правой кнопкой мыши созданный новый текстовый файл и присвоить Действие при построении свойство значение внедренный ресурс.

    Запись Панель элементов мониторинг быть загружен содержать имя класса, реализующего, имя сборки, содержащей его.

    Дополнительные сведения о формате записей элементы управления панели элементов на внедренный ресурс текста см. в разделе ParseToolboxResource ссылка на страницу.

  5. Установка пути поиска файлов размещения, содержащий сборки объекты управления в панели элементов.

    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 ссылка на страницу.

  6. Получение экземпляра 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

  1. Создайте экземпляр Assemblyв каждой сборке, ссылающся которой быть отсканированы, ToolboxItem объекты.

    Примечание

    Получить экземпляр Assembly для текущей сборки, используйте статический метод GetExecutingAssembly.

  2. Для каждой сборки для просмотра, используйте Assembly объект GetTypes метод, чтобы получить список каждого Type в сборке.

  3. Убедитесь, что тип не является абстрактным и не поддерживается IComponent интерфейс (все реализации элементов управления панели элементов, используемых для создания a ToolboxItem объект должен реализовывать этот интерфейс).

  4. Получает атрибуты Type и использовать эти сведения для определения, желает загрузки VSPackage объект.

    Примечание

    Хотя в субъекта можно создать a ToolboxItem объект IComponent реализация интерфейса без экземпляра ToolboxItemAttribute не устанавливайте значение false при применении к нему, не рекомендуется.

  5. Используйте GetConstructor для получения конструкторы ToolboxItem объекты, которые требуется отслеживать панель элементов.

  6. Построение ToolboxItem объекты и добавить их к Панель элементов.

Чтобы увидеть, что примере проиллюстрировал явное использование отражения получать и элементов управления панели элементов autoload см. в разделе CreateItemList описано в пределах Пошаговое руководство: элементы панели элементов автозагрузки.

Дополнительная конфигурация элемента управления панели элементов

VSPackage дополнительный элемент управления может работать над, когда и как элемент управления области элементов перечислены Панель элементовпутем реализации IConfigureToolboxItemи использование ProvideAssemblyFilterAttributeи ProvideToolboxItemConfigurationAttribute.

Применить ToolboxItemFilterAttribute экземпляры класса содержат только статический элемент управления над, когда и как a Панель элементов элемент управления доступен.

Создания динамической поддержки конфигурации для элементов управления панели элементов

  1. Постройте реализация класса IConfigureToolboxItem интерфейс как часть VSPackage.

    Примечание

    IConfigureToolboxItem интерфейс должен быть реализован на одном и том же классе, предоставляет реализацию VSPackage Package.

  2. Свяжите реализация 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));
                }
            }
        }
    }
    
  3. Зарегистрируйте 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 Панель элементов поставщик см. в разделе Регистрация функции поддержки панели элементов.

Предоставить пользовательские форматы буфера обмена и поддержки перетаскивания с элементами управления панели элементов

  1. Создайте реализация ToolboxItemCreatorCallback делегат.

    Эта реализация должна вернуть a ToolboxItem объект, поддерживающий нестандартный формат буфера обмена.

    Для реализации примера a ToolboxItemCreatorCallback делегат, cм. ToolboxItem и ToolboxItemCreatorCallback страницы, ссылки.

  2. Выполните эту реализацию 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) {
               /*
                */
            }
        }
    }
    

Содержание

См. также

Задачи

Практическое руководство. Управление панелью элементов

Основные понятия

Регистрация функции поддержки панели элементов

Практическое руководство. Безопасные пользовательские элементы панели элементов с помощью сборок взаимодействия

Управление панелью элементов

Другие ресурсы

Панель элементов (Visual Studio)

Пошаговые руководства панели элементов