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).
[as]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; }
}
}[/as]
Custom Class
[as]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 ); } } }[/as]