Практическое руководство. Реализация поставщика расширения
Поставщики расширений позволяют добавлять свойства к элементам управления.Элементы управления ActiveX также используют концепцию поставщиков расширений, однако они требуют специальной поддержки языка программирования.В платформе .NET Framework поставщикам расширений специальная поддержка не требуется.В исходном коде свойство поставщика расширений находится в объекте поставщика расширений.Для установки значения свойства для другого объекта требуется следующая информация: объект, для которого задается свойство, и новое значение свойства.Например, в Windows Forms имеется компонент ToolTip, предоставляющий поставщик расширения другим элементам управления.Свойство, которое он устанавливает для других объектов, является строкой, представляющей собой всплывающую подсказку, отображаемую, когда указатель мыши наводится на элемент управления.В следующем примере кода показано, как задать значение свойства ToolTip:
tooltip1.SetToolTip(button1, "The tooltip text")
tooltip1.SetToolTip(button1, "The tooltip text");
В режиме конструирования свойства расширения отображаются в обозревателе свойств в виде свойств объектов, которые они расширяют, а не в самих объектах расширения.В предыдущем примере свойство ToolTip отображается в button1, а не в tooltip1.
Реализация поставщика расширения
Определите компонент, реализующий интерфейс 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); }
Реализуйте метод CanExtend, возвращающий значение true для каждого компонента или элемента управления, для которого поставщик расширения предоставляет свойства.
Определите набор свойств, предоставляемых поставщиком расширения другим компонентам.На самом деле такие свойства являются методами, так как им требуется дополнительный параметр, указывающий компонент, для которого задается свойство.
Класс поставщика расширения должен быть помечен атрибутом ProvidePropertyAttribute.Конструктор ProvidePropertyAttribute принимает два аргумента: строку, задающую имя добавляемого свойства, и тип объекта, для которого предоставляется свойство.
<ProvideProperty("HelpText", GetType(IComponent))> _
Public Class MyExtender
Implements IExtenderProvider
...
End Class
[ProvideProperty("HelpText", typeof(IComponent))]
class MyExtender : IExtenderProvider {...}
Несмотря на то, что поставщик расширений может предоставлять свойства любым компонентам, его реализация обычно включает действия, делающие возможным использование свойства лишь особой категорией компонентов.
Полный пример см. в разделе Практическое руководство. Реализация поставщика расширителей HelpLabel.
См. также
Задачи
Практическое руководство. Реализация поставщика расширителей HelpLabel