Cenni preliminari sul 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 in qualsiasi controllo PropertyGrid associato. In fase di progettazione è possibile impostare un valore per tale proprietà.
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à viene visualizzata in qualsiasi classe PropertyGrid associata al componente modificato. In fase di esecuzione, tuttavia, non è possibile accedere alla proprietà attraverso il componente, bensì è necessario chiamare il metodo GetToolTip sul componente ToolTip.
Implementazione
Nell'elenco riportato di seguito viene descritta la procedura necessaria per l'implementazione di un provider di estensione:
Utilizzare l'attributo ProvidePropertyAttribute per specificare le proprietà fornita dal provider di estensione.
Implementare la proprietà fornita.
Tenere traccia dei controlli che ricevono la proprietà fornita.
Implementare l'interfaccia IExtenderProvider.
Per informazioni dettagliate, vedere Procedura: implementare un provider di estensione. Per un esempio completo, vedere Procedura: implementare un provider di estensione HelpLabel.
Attributo ProvideProperty
Il provider di estensione è una classe e, in quanto tale, dispone 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.
Implementazione della proprietà fornita
Di norma la proprietà fornita non viene implementata come proprietà, ma piuttosto come coppia di metodi. È necessario assegnare a tali metodi i nomi GetNomeProprietà e SetNomeProprietà. Se l'implementazione del provider di estensione, ad esempio, fornisce una proprietà denominata DemoText, si assegnano ai metodi i nomi GetDemoText e SetDemoText.
Tali metodi accettano un solo parametro Component, che consente di tenere traccia dei valori di proprietà assegnati ai diversi componente.
Individuazione dei controlli che ricevono la proprietà fornita
Per l'implementazione della proprietà fornita è necessario registrare e recuperare i valori della proprietà per ogni componente mediante IDictionary o un altro oggetto di raccolta.
È possibile, ad esempio, utilizzare l'istanza del componente come proprietà Key per un componente DictionaryEntry e il valore della proprietà come proprietà Value dell'oggetto DictionaryEntry. Quando si chiama il metodo GetNomeProprietà, l'implementazione cercherà di ottenere dalla raccolta il valore della proprietà corrispondente al componente dato.
Implementazione dell'interfaccia IExtenderProvider
Ogni classe di estensione deve implementare l'interfaccia IExtenderProvider. L'interfaccia è composta da un singolo metodo, CanExtend, che restituisce un valore Boolean e indica alla finestra di progettazione se un componente può essere esteso o meno.
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. È possibile ad esempio creare un'estensione con cui sia fornita una proprietà solo ai controlli. L'implementazione del metodo CanExtend può imporre tale vincolo.
Vedere anche
Attività
Procedura: implementare un provider di estensione
Procedura: implementare un provider di estensione HelpLabel