Cómo: Implementar un proveedor extensor

Actualización: noviembre 2007

Los proveedores extensores pueden agregar propiedades a controles. Los controles ActiveX también utilizaban el concepto de proveedores extensores, pero requerían la compatibilidad de un lenguaje de programación especial. En .NET Framework, los proveedores extensores no requieren una compatibilidad especial. En el código fuente, una propiedad de proveedor de extensor se encuentra en el objeto proveedor extensor. Para establecer el valor de la propiedad en otro objeto, se necesitan dos elementos: el objeto en que se va a establecer el valor y el nuevo valor de la propiedad. Por ejemplo, Formularios Windows Forms tiene un componente ToolTip que ofrece una propiedad extensora para otros controles. La propiedad que establece en otros objetos es una cadena que representa la Información sobre herramientas que aparece cuando se desplaza el puntero por encima del control. En el siguiente ejemplo de código se muestra cómo establecer la propiedad ToolTip.

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

En tiempo de diseño, las propiedades extensoras aparecen en el explorador de propiedades como propiedades de los objetos que extienden, en lugar de aparecer como propiedades del objeto extensor real. En el ejemplo anterior, la propiedad ToolTip aparece en button1, no en tooltip1.

Para implementar un proveedor extensor

  1. Defina un componente que implemente la interfaz de IExtenderProvider.

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

    La definición de IExtenderProvider es la siguiente.

    Public Interface IExtenderProvider
       Function CanExtend(ByVal extendee As Object) As Boolean
    End Interface
    
    public interface IExtenderProvider {
        bool CanExtend(object extendee);
    }
    
  2. Implemente el método CanExtend para que devuelva true por cada componente o control para el que el extensor proporcione propiedades.

  3. Defina un conjunto de propiedades que pueda proporcionar el extensor a otros componentes. Las propiedades son en realidad métodos, ya que toman un parámetro adicional que especifica el componente al que se va a aplicar la propiedad.

La clase de proveedor de un extensor se debe marcar con un ProvidePropertyAttribute. El constructor de ProvidePropertyAttribute toma dos argumentos: primero, una cadena que especifica el nombre de la propiedad que se va a agregar y, segundo, el tipo de objeto al que se proporciona la propiedad.

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

Aunque un proveedor extensor puede proporcionar propiedades a cualquier componente, la implementación suele incluir características que permiten utilizarlo sólo con una categoría específica de componentes.

Para ver un ejemplo completo, consulte Cómo: Implementar un proveedor extensor HelpLabel.

Vea también

Tareas

Cómo: Implementar un proveedor extensor HelpLabel

Otros recursos

Ampliar compatibilidad en tiempo de diseño