Практическое руководство. Реализация поставщика расширения

Поставщики расширений позволяют добавлять свойства к элементам управления. Элементы управления ActiveX также используют концепцию поставщиков расширений, однако они требуют специальной поддержки языка программирования. В платформе .NET Framework поставщикам расширений специальная поддержка не требуется. В исходном коде свойство поставщика расширений находится в объекте поставщика расширений. Для установки значения свойства для другого объекта требуется следующая информация: объект, для которого задается свойство, и новое значение свойства. Например, в Windows Forms имеется компонент ToolTip, предоставляющий поставщик расширения другим элементам управления. Свойство, которое он устанавливает для других объектов, является строкой, представляющей собой всплывающую подсказку, отображаемую, когда указатель мыши наводится на элемент управления. В следующем примере кода показано, как задать значение свойства ToolTip:

tooltip1.SetToolTip(button1, "The tooltip text")
tooltip1.SetToolTip(button1, "The tooltip text");

В режиме конструирования свойства расширения отображаются в обозревателе свойств в виде свойств объектов, которые они расширяют, а не в самих объектах расширения. В предыдущем примере свойство ToolTip отображается в button1, а не в tooltip1.

Реализация поставщика расширения

  1. Определите компонент, реализующий интерфейс IExtenderProvider.

    Public Class MyExtender
       Implements IExtenderProvider
       ...
    End Class
    
    public class MyExtender : IExtenderProvider {...}
    

    Определение IExtenderProvider выглядит следующим образом.

    Public Interface IExtenderProvider
       Function CanExtend(ByVal extendee As Object) As Boolean
    End Interface
    
    public interface IExtenderProvider {
        bool CanExtend(object extendee);
    }
    
  2. Реализуйте метод CanExtend, возвращающий значение true для каждого компонента или элемента управления, для которого поставщик расширения предоставляет свойства.

  3. Определите набор свойств, предоставляемых поставщиком расширения другим компонентам. На самом деле такие свойства являются методами, так как им требуется дополнительный параметр, указывающий компонент, для которого задается свойство.

Класс поставщика расширения должен быть помечен атрибутом ProvidePropertyAttribute. Конструктор ProvidePropertyAttribute принимает два аргумента: строку, задающую имя добавляемого свойства, и тип объекта, для которого предоставляется свойство.

<ProvideProperty("HelpText", GetType(IComponent))> _
Public Class MyExtender
   Implements IExtenderProvider 
   ...
End Class
[ProvideProperty("HelpText", typeof(IComponent))]
   class MyExtender : IExtenderProvider {...}

Несмотря на то, что поставщик расширений может предоставлять свойства любым компонентам, его реализация обычно включает действия, делающие возможным использование свойства лишь особой категорией компонентов.

Полный пример см. в разделе Практическое руководство. Реализация поставщика расширителей HelpLabel.

См. также

Задачи

Практическое руководство. Реализация поставщика расширителей HelpLabel

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

Расширение поддержки времени разработки