Oggetti provider di estensione
Un provider di estensione è un componente mediante cui sono fornite proprietà ad altri componenti. Quando ad esempio si aggiunge un componente ToolTip a un form, a tutti i controlli presenti su quel form viene fornita una proprietà chiamata ToolTip. La proprietà ToolTip viene quindi visualizzata nella finestra Proprietà relativa a ogni controllo e consente allo sviluppatore di impostare un valore per la proprietà in fase di progettazione.
La proprietà fornita dal provider di estensione si trova in effetti nell'oggetto provider di estensione, pertanto non può essere considerata una vera proprietà del componente modificato. In fase di progettazione la proprietà verrà visualizzata nella finestra Proprietà per il componente in corso di modifica. In fase di esecuzione, tuttavia, non è possibile accedere alla proprietà tramite il componente. Nell'esempio di codice riportato di seguito è stato creato un form con un pulsante chiamato MyButton e un controlloToolTip chiamato MyToolTip, che fornisce una proprietà 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;
Mediante questa sintassi verrà generato un errore di compilazione, poiché dal compilatore non viene riconosciuta ToolTip come proprietà di MyButton, in quanto la proprietà viene effettivamente fornita da MyToolTip. Nell'esempio che segue viene illustrato come accedere correttamente a questa proprietà:
Dim myString as String
myString = MyToolTip.GetToolTip(MyButton)
string myString;
myString = MyToolTip.GetToolTip(MyButton);
Il provider di estensione è una classe e, in quanto tale, può disporre di proprietà e metodi propri. Per specificare una proprietà come proprietà da fornire ad altri componenti, applicare l'attributo ProvidePropertyAttribute al livello della classe. Questo attributo consente di specificare il nome della proprietà da fornire e il tipo di oggetto a cui può essere fornita. Di norma la proprietà fornita non viene implementata come proprietà, ma piuttosto come coppia di metodi. Nel caso di questi metodi è necessario aggiungere "Get" e "Set" all'inizio del nome della proprietà da fornire. Il modo sarà illustrato nell'esempio che segue.
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.
}
}
Per l'implementazione della proprietà fornita è necessario che mediante Hashtable o un altro insieme simile siano registrati e recuperati i valori della proprietà per ogni controllo. Per informazioni dettagliate, vedere Procedura: implementare un provider di estensione.
È necessario che anche l'interfaccia IExtenderProvider sia implementata da ogni classe di estensione. L'interfaccia è composta da un singolo metodo, CanExtend, dal quale viene restituito un valore Boolean e viene indicato alla finestra di progettazione se un componente può essere esteso o meno. È possibile ad esempio creare un'estensione con cui sia fornita una proprietà solo ai controlli. Nell'esempio che segue verrà illustrato come implementare il metodo 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;
}
Vedere anche
Attività
Procedura: implementare un provider di estensione
Procedura: implementare un provider di estensione HelpLabel