Implementazione di un provider di estensione

I provider di estensione consentono di aggiungere proprietà ad altri controlli. Anche nei controlli ActiveX veniva utilizzato il concetto di provider di estensione, ma era necessario il supporto di uno speciale linguaggio di programmazione. In .NET Framework i provider di estensione non necessitano di alcun supporto speciale. Nel codice sorgente le proprietà dei provider di estensione vengono impostate sui singoli oggetti provider di estensione. Per impostare il valore di tali proprietà su altri oggetti è necessario conoscere sia l'oggetto su cui impostare il valore sia il nuovo valore della proprietà. In Windows Form, ad esempio, è disponibile un componente ToolTip che offre una proprietà di estensione ad altri controlli. La proprietà impostata su altri oggetti è una stringa che rappresenta la descrizione del comando visualizzata quando il puntatore del mouse viene posizionato sopra il controllo. Nell'esempio di codice seguente viene mostrato come impostare la proprietà ToolTip.

tooltip1.SetToolTip(button1, "The tooltip text")
[C#]
tooltip1.SetToolTip(button1, "The tooltip text");

In fase di progettazione le proprietà di estensione sono indicate nel visualizzatore proprietà come proprietà definite per gli oggetti da esse estesi, anziché per l'effettivo oggetto di estensione. Nell'esempio precedente la proprietà ToolTip è presente su button1, non su tooltip1.

Per implementare un provider di estensione

  1. Definire un componente che implementi l'interfaccia System.ComponentModel.IExtenderProvider.

    Public Class MyExtender
       Implements IExtenderProvider
       ...
    End Class
    [C#]
    public class MyExtender : IExtenderProvider {...}
    

    La definizione di IExtenderProvider è illustrata di seguito.

    Public Interface IExtenderProvider
       Function CanExtend(ByVal extendee As Object) As Boolean
    End Interface
    [C#]
    public interface IExtenderProvider {
        bool CanExtend(object extendee);
    }
    
  2. Implementare il metodo CanExtend in modo che restituisca true per ciascun componente o controllo per il quale il provider di estensione fornisce proprietà.

  3. Definire un insieme di proprietà che il provider di estensione possa fornire ad altri componenti. Le proprietà rappresentano in realtà dei metodi perché accettano un parametro supplementare che specifica il componente cui ciascuna proprietà va applicata.

È necessario che le classi di provider di estensione siano contrassegnate dall'attributo ProvidePropertyAttribute. Il costruttore dell'attributo ProvidePropertyAttribute accetta due argomenti: una stringa che specifica il nome della proprietà da aggiungere e il tipo di oggetto a cui fornire la proprietà.

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

Mentre un provider di estensione è in grado di fornire proprietà a qualsiasi componente, l'implementazione include in genere caratteristiche che ne consentono l'utilizzo solo con una specifica categoria di componenti.

**Nota   **L'implementazione di un provider di estensione per controlli Windows Form è diversa da quella per controlli server ASP.NET.

Per un esempio completo, vedere Esempio di provider di estensione Windows Form.

Vedere anche

Miglioramento del supporto della fase di progettazione | Esempio di provider di estensione di Windows Form