Quando si costruisce un Composite Control, spesso si ha l'esigenza di dover gestire gli eventi dei controlli direttamente all'interno del contenitore. Per fare questo, invece di aggiungere un delegato per l'evento dei controlli, si possono impostare le proprietà CommandName e CommandArgument di questi e poi fare l'override del metodo OnBubbleEvent per verificare quale sia il controllo che ha scatenato l'evento.
In questo script, c'è una textbox con due bottoni che visualizzano uno l'ora corrente e l'altro l'ora UTC. Prima si imposta la proprietà CommandName di ognuno dei bottoni, poi nel metodo OnBubbleEvent si recupera il CommandName del bottone che ha scatenato l'evento e si decide quale ora visualizzare nel textbox.
using System; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace ASPItalia.com.Web.UI.Controls { public class MyCompositeControl : CompositeControl { public MyCompositeControl() { } TextBox _textbox; Button _UTCDateButton; Button _localDateButton; protected override void CreateChildControls() { //pulisce la collezione dei controlli Controls.Clear(); //istanzia ed aggiunge i controlli al contenitore _textbox = new TextBox(); _UTCDateButton = new Button(); _localDateButton = new Button(); Controls.Add(_textbox); Controls.Add(_UTCDateButton); Controls.Add(_localDateButton); //imposta il testo e la proprietà CommandName dei bottoni per l'identificazione dell'evento _UTCDateButton.Text = "UTC"; _UTCDateButton.CommandName = "UTC"; _localDateButton.Text = "Local"; _localDateButton.CommandName = "Local"; } protected override bool OnBubbleEvent(object source, EventArgs args) { //indica se l'evento è gestito o meno bool handled = false; //esegue il cast dell'argomento di input a CommandEventArgs CommandEventArgs arg = args as CommandEventArgs; if (args != null) { //imposta il flag settando l'evento come gestito handled = true; //imposta il textbox con la data in base al CommandName del bottone premuto if (arg.CommandName == "UTC") _textbox.Text = DateTime.UtcNow.ToString(); else _textbox.Text = DateTime.Now.ToString(); } //ritorna il flag che identifica se l'evento è stato gestito o meno return handled; } } }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.