Send multiple parameters to event handlers

At one point or another during the time you write applications with ActionScript 3 you will have to send parameters from to an event handler. By default you can't send information unless you use the DataEvent, but that only allows you to send a string. That is OK if that is all you need to send but how about multiple parameters? How about an object or references?

In the example below we create a square on the stage that then will dispatch a custom event with 3 parameters (two strings and one number).

ActionScript:
    package {

     import flash.display.Sprite;
     import event.CustomEvent;
     import flash.events.Event;
     import flash.events.MouseEvent;

     public class App extends Sprite
     {

       var square : Sprite ;   

       public function App()
       {
          init ( ) ;
       }

       private function init ( ) : void
       {

        //add the event listener to the Document class.

       this.addEventListener(
            CustomEvent.MOUSE_CLICK,
            customEventHandler  ) ;           

        // Draw a square on stage and add a mouseEvent
        // that then will dispatch a custom event

        square = drawSquare();
        square.buttonMode = true;
        square.addEventListener (
        MouseEvent.CLICK,dispatchCustomEvent ) ;

        addChild(square);

        }

        private function dispatchCustomEvent ( e : Event ) : void
        {
        dispatchEvent ( new CustomEvent (
                            CustomEvent.MOUSE_CLICK ,
                            "myParam1",
                            "myParam2",
                            3 ) ) ;
        }

        private function customEventHandler ( e :CustomEvent )
        {
            trace( "Param 1: " + e.param1 ) ;
            trace( "Param 1: " + e.param2 ) ;
            trace( "Param 1: " + e.param3 ) ;
            }

        private function drawSquare ( ) : Sprite
        {

            var square:Sprite = new Sprite();

                square.graphics.beginFill(0x000000);
                square.graphics.drawRect(100, 100, 100, 100);
                square.graphics.endFill(); 
                return square as Sprite; 
             }

        }

    }

Custom Class

ActionScript:
    package event
    {   

     import flash.events.Event;

     public class CustomEvent extends Event
     {

        public static const MOUSE_CLICK : String = "mouseClick";

        public var param1 : String ;
        public var param2 : String ;
        public var param3 : int ;

        public function CustomEvent(
                            type : String, 
                            param1 : String,
                            param2 : String,
                            param3 : int,
                            bubbles:Boolean = false,
                            cancelable:Boolean = false )
        {

            super ( type, bubbles, cancelable ) ;

            this.param1 = param1;
            this.param2 = param2;
            this.param3 = param3;

         }

         override public function clone(  ): Event
            {
                return new CustomEvent( type, param1, param2, param3,
    bubbles, cancelable );
            }   
     }
    }

3 Responses to “Send multiple parameters to event handlers”

  1. Shaedo January 6, 2010 at 2:26 pm # Reply

    thank you! this was exactly what I wanted. I very much appreciate you taking the time to write this up!

  2. Ion January 29, 2010 at 4:40 pm # Reply

    I read the documentation about extending the event class and it says that “when creating an Event subclass you must override the clone() and toString() methods to provide functionality specific to the subclass.”.

    I see you override the clone() method but not the toString() method. Isn’t this an issue ?

Trackbacks/Pingbacks

  1. Tweets that mention Send multiple parameters to event handlers -- Topsy.com - October 1, 2009

    [...] This post was mentioned on Twitter by kyle smith. kyle smith said: Send multiple parameters to event handlers: At one point or another during the time you write applications with.. http://bit.ly/13Z9fL [...]

Leave a Reply