#919 - Gestione degli eventi in un Composite Control per ASP.NET 2.0

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;
    }
  }
}


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC