Objetos de proveedor extensor
Un proveedor extensor es un componente que proporciona propiedades a otros componentes. Por ejemplo, cuando se agrega un componente ToolTip a un formulario, proporciona una propiedad llamada ToolTip a cada control de ese formulario. Entonces, la propiedad ToolTip aparece en la ventana Propiedades de cada control y permite que el desarrollador establezca un valor para esta propiedad en tiempo de diseño.
La propiedad proporcionada por el proveedor extensor reside realmente en el propio objeto proveedor extensor y, en consecuencia, no es una propiedad real del componente que modifica. En tiempo de diseño, la propiedad aparecerá en la ventana Propiedades del componente que se está modificando. Sin embargo, en tiempo de ejecución, no se puede tener acceso a la propiedad a través del propio componente. En el ejemplo de código siguiente, se ha creado un formulario con un botón denominado MyButton y un control ToolTip denominado MyToolTip, que proporciona una propiedad ToolTip.
' This is an example of code that is NOT CORRECT!
Dim myString as String
myString = MyButton.ToolTip
// This is an example of code that is NOT CORRECT!
string myString;
myString = MyButton.ToolTip;
Esta sintaxis generará un error de compilación, porque el compilador no reconoce ToolTip como propiedad de MyButton, debido a que en realidad la propiedad la proporciona MyToolTip. El ejemplo siguiente muestra la forma correcta de tener acceso a la propiedad:
Dim myString as String
myString = MyToolTip.GetToolTip(MyButton)
string myString;
myString = MyToolTip.GetToolTip(MyButton);
El proveedor extensor es una clase y, como tal, puede tener sus propias propiedades y sus propios métodos. Para designar una propiedad como la propiedad que se va a proporcionar a otros componentes, aplique el atributo ProvidePropertyAttribute en el nivel de clase. Este atributo especifica el nombre de la propiedad que se proporciona y el tipo de objeto al que se puede proporcionar esta propiedad. Por convención, la propiedad que se proporciona no se implementa como una propiedad, sino como un par de métodos. A estos métodos se les debe agregar "Get" y "Set" al principio del nombre de la propiedad que se va a proporcionar, tal como se muestra en el ejemplo siguiente.
Imports System.ComponentModel
<ProvideProperty("MyText", GetType(Control))> Public Class MyExtender
<ExtenderProvidedProperty()> Public Function GetMyText(acontrol as _
Control) as String
' Insert code to implement function.
End Function
Public Sub SetMytext (acontrol as Control)
' Insert code to implement function.
End Function
End Class
using System.ComponentModel;
[ProvideProperty("MyText", typeof("Control"))]
public class MyExtender
{
[ExtenderProvidedProperty()]
public string GetMyText(Control acontrol)
{
// Insert code to implement method.
}
public void SetMyText(Control acontrol)
{
// Insert code to implement method.
}
}
La implementación de la propiedad que se proporciona necesita un objeto Hashtable u otro objeto de colección similar que registre y recupere los valores de propiedad de cada control. Para obtener información detallada, vea Cómo: Implementar un proveedor extensor.
Cada clase extensora debe implementar también la interfaz IExtenderProvider. Esta interfaz consta de un solo método, CanExtend, que devuelve un valor de tipo Boolean e indica al diseñador si un componente es candidato a ser extendido o no. Por ejemplo, quizá desee crear un extensor que proporcione una propiedad sólo a controles. El ejemplo siguiente muestra cómo se implementa el método CanExtend:
Imports System.ComponentModel
Public Function CanExtend(ByVal extendee As Object) As Boolean _
Implements IExtenderProvider.CanExtend
If Typeof extendee Is Control Then
Return True
Else
Return False
End If
End Function
public bool CanExtend(object extendee)
{
if (extendee is Control)
return true;
else
return false;
}
Vea también
Tareas
Cómo: Implementar un proveedor extensor
Cómo: Implementar un proveedor extensor HelpLabel