di: Giuseppe Marchi 03 Ottobre 2007
All'interno del metodo CreateChildControls(), è stato definito l'handler per l'evento Click del bottone, uno dei controlli figlio del nostro controllo composito.
btnCommand.Click += new EventHandler(btnCommand_Click);
Questo evento viene scatenato correttamente, ma sarà possibile gestirlo solo all'interno del controllo. Una volta inserito il controllo in una pagina ASP.NET, non possiamo più assegnargli un delegato. Possiamo dire che siamo andati "al di fuori del contesto" (scope) dell'evento.
Per questo motivo, abbiamo la necessità di aggiungere un evento al nostro controllo composito che possa essere gestito dalla pagina Web che lo ospita e che venga scatenato al click del bottone. Per farlo, creiamo un evento e lo aggiungiamo alla collezione di eventi del controllo (rappresentata dalla proprietà Events). Poi creiamo il relativo gestore.
Definire un evento
private static readonly object eventKey = new object();
[Browsable(true), Category("Action")]
public event EventHandler Save
{
add
{
Events.AddHandler(eventKey, value);
}
remove
{
Events.RemoveHandler(eventKey, value);
}
}
protected virtual void OnSave(EventArgs e)
{
EventHandler handler = (EventHandler)Events[eventKey];
if (handler != null)
{
handler(this, e);
}
}
Infine, all'interno del gestore dell'evento Click del nostro bottone, va scatenato il nostro evento custom.
protected void btnCommand_Click(object sender, EventArgs e)
{
OnSave(EventArgs.Empty);
}
Come ultimo accorgimento da prendere, possiamo impostare l'evento Save come predefinito aggiungendo l'attributo DefaultEvent tra quelli che già decoravano la classe.
[DefaultEvent("Save"), DefaultProperty("Caption"), ToolboxData("<{0}:CustomerDetail runat=\"server\"> </{0}:DettagliUtente>")]
public class DettagliUtente : CompositeControl
A questo punto, lo sviluppo del nostro controllo composito può considerarsi concluso.
Per inserire il nuovo controllo nelle pagine dobbiamo, come sempre, registrare il controllo. Possiamo poi modificarne le proprietà e gestirne gli eventi.
Inserire il controllo in una pagina Web
<%@ Register Namespace="HTMLit.Web.UI.WebControls" TagPrefix="HTMLit" %>
<script runat="server">
protected void SalvaDatiCliente(object sender, EventArgs e)
{
// eventuale salvataggio di dati nel database
lbl.Text = String.Format("Nome: {0}<br />" + "Cognome: {1}<br />" + "Telefono: {2}",
detail.Nome,
detail.Cognome,
detail.Telefono);
}
Il controllo risulta semplice da usare, per merito dell'incapsulamento: abbiamo racchiuso diversi comportamenti in un unico oggetto, per creare una nuova, unica, funzionalità avanzata.
Lo sviluppo di controlli compositi è un campo in cui è un piacere addentrarsi, in quanto è possibile creare oggetti unici che racchiudono funzionalità e comportamenti nuovi rispetto a quelli offerti dai controlli già presenti all'interno del .NET Framework. Il tutto poi, può essere reso personalizzabile, in modo da poter distribuire il controllo ed utilizzarlo in più contesti possibili tra loro differenti. Siamo limitati solamente dalla nostra fantasia.
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 |