Use SetEventHandler to set event handler to a target
<?xml version="1.0"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> import flash.events.Event; private function handlerBase():void { ta1.text = "handler 1"; } private function handlerState1(event:Event):void { ta1.text ="handler 2."; } private function handlerState3(theString:String):void { ta1.text ="param: "+ theString; } </mx:Script> <mx:states> <mx:State name="State1"> <mx:SetEventHandler target="{b1}" name="click" handlerFunction="handlerState1" /> <mx:SetProperty target="{b1}" name="label" value="State 1" /> </mx:State> <mx:State name="State2"> <mx:SetEventHandler target="{b1}" name="click" handler="ta1.text='listener';" /> <mx:SetProperty target="{b1}" name="label" value="State 2" /> </mx:State> <mx:State name="State3"> <mx:SetEventHandler target="{b1}" name="click" handler="handlerState3('my param');" /> <mx:SetProperty target="{b1}" name="label" value="State 3" /> </mx:State> </mx:states> <mx:Button id="b1" label="Click Me: Base State" click="handlerBase();" /> <mx:TextArea id="ta1" height="100" width="50%" /> <mx:Button label="state 1" click="currentState='State1';" /> <mx:Button label="state 2" click="currentState='State2';" /> <mx:Button label="state 3" click="currentState='State3';" /> <mx:Button label="Start" click="currentState='';" /> </mx:Application>