di: Giuseppe Marchi 10 Ottobre 2007
Gli editor di tipi sono delle ulteriori finestre che sono create sempre a supporto della finestra delle proprietà, poiché la maggior parte dei tipi personalizzati hanno bisogno di differenti strutture di input per l'inserimento delle informazioni, in quanto semplici caselle di testo o menu a tendina spesso non possono bastare. Un editor di tipo che avrete sicuramente utilizzato molto spesso è l'editor per la creazione del collegamento tra un controllo di tipo Data-Bound e un DataSource; in un'operazione del genere è infatti necessario che l'interfaccia grafica sia completa sia per la scelta della fonte di dati che per la scelta dei singoli campi di binding.
Nota: per la creazione di un editor di tipo custom, bisogna avere una minima conoscenza della classi utilizzate per la creazione di Windows Form, il che esula da tutto il mondo legato ad ASP.NET; nonostante ciò daremo comunque la basi per la costruzione di questo tipo di personalizzazioni.
Come esempio, proviamo a creare un editor per la proprietà Url del nostro controllo PopUpLink. L'editor dovrà semplicemente far visualizzare, in una finestra modale, l'indirizzo della pagina che si intende inserire nel controllo, attraverso un controllo WebBrowser (controllo proprio del namespace System.Windows.Form).
Ogni editor di tipo, eredita dalla classe UITypeEditor. Tale classe obbliga l'override di due metodi:
| Metodi da implementare | |
| Metodo | Descrizione |
|---|---|
| EditValue | Utilizzato per visualizzare la form di supporto alla proprietà e per la modifica dei valori legati al controllo padre |
| GetEditStyle | Utilizzato per definire lo stile da applicare alla Windows Form di supporto |
Questo il codice del nostro editor personalizzato (lo sviluppo della Windows Form verrà saltato in quanto non rientra nell'argomento dell'articolo; il codice è comunque presente nel file da scaricare):
public class PopUpEditor : UITypeEditor
{
private IWindowsFormsEditorService service = null;
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
if (context != null && provider != null)
{
service = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if(service != null && context.Instance != null)
{
// prelevo l'istanza del controllo di riferimento
PopUpLink control = (PopUpLink)context.Instance;
// apro la Windows Form
service.ShowDialog(new PopUpFormEditor(control));
}
}
return value;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
if(context != null)
{
if (context.Instance != null) return UITypeEditorEditStyle.Modal;
}
return base.GetEditStyle(context);
}
}
Una volta creato l'editor e la Windows Form associata, non dobbiamo far altro che legarlo alla proprietà che abbiamo intenzione di modificare attraverso questa finestra di supporto.
[Browsable(true), Category("Appearance"), Description("Link url value.")]
[Editor(typeof(PopUpEditor), typeof(UITypeEditor))]
public string Url
{
get
{
object o = ViewState["Url"];
return (o == null) ? String.Empty : (string)o;
}
set { ViewState["Url"] = value; }
}
Il riusltato è d'avvero di forte impatto.
Se abbiamo intenzione di distribuire le nostre librerie di controlli web, non è assolutamente pensabile non passare per la personalizzazione del supporto di questi ultimi per quanto riguarda la fase di desgin/progettazione. Un primo aiuto lo danno già gli attributi di progettazione, che ci danno la possibilità, in maniera del tutto dichiarativa, di modificare il comportamento dei nostri controlli in tale fase.
Abbiamo visto anche però, che per rendere i controlli il più malleabili possibile è necessario sviluppare un supporto visuale più complesso, avvalendosi di classi extra per la creazione di control designers, editor di tipi e convertitori di tipi, tutti strumenti che aiutano lo sviluppatore a modificare velocemente e con facilità il comportamento dei nostri controlli web.
Guida Windows Azure Code SnippetsLe migliori pratiche per far girare le applicazioni "in the cloud",... |
Guida ASP.NET MVC Best PracticesUn workflow dettagliato e ricco di suggerimenti pratici per... |
Guida ASP.NET Starter KitUn modo semplice per imparare ad utilizzare le tecnologie Microsoft... |
Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.
Iscriviti alla newsletter
|
|
Corso Progettazione database11 Maggio 2012 a Milano |
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |