1.方式一:通过继承Event类编写Flex4的自定义事件
?
?
下面我们来做一个例子,实现这样的功能:监控TextInput的输入,通过监控输入的内容,触发不同的自定义事件。
我们先来写这个自定义事件:
ActionScript类Test43Event.cs
packagedemo
?????????????? ?importflash.events.Event;
? |
????public class Test43Event extends Event |
? |
????????public static var Test43_Number:String = "number"; |
? |
????????public static var Test43_Letter:String = "letter"; |
? |
????????public static var Test43_Other:String = "other"; |
?????????? |
????????public function Test43Event(type:String,bubbles:Boolean=false,??????????????cancelable:Boolean=false) |
? |
????????????super(type,bubbles,cancelable); |
?
然后添加一个MXML应用程序test43.mxml调用这个自定义事件
???????? <?xml version="1.0" encoding="utf-8"?>
? |
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"? |
? |
???????????????xmlns:s="library://ns.adobe.com/flex/spark"? |
? |
???????????????xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)"> |
? |
????????<s:BasicLayout/> |
? |
????????????import mx.events.FlexEvent; |
? |
????????????protected function textinput1_keyDownHandler(event:KeyboardEvent):void |
? |
????????????????var test43Event:Test43Event; |
? |
????????????????if(event.keyCode>=48 && event.keyCode<=57)??? //0-9 |
? |
????????????????????test43Event = new Test43Event(Test43Event.Test43_Number); |
? |
????????????????????dispatchEvent(test43Event); |
? |
????????????????else if(event.keyCode>=65 && event.keyCode<=90)?? //a-z A-Z |
? |
????????????????????test43Event = new Test43Event(Test43Event.Test43_Letter); |
? |
????????????????????dispatchEvent(test43Event); |
? |
????????????????????test43Event = new Test43Event(Test43Event.Test43_Other); |
? |
????????????????????dispatchEvent(test43Event); |
? |
????????????private function func1(event:Event):void |
? |
????????????????if(event.type==Test43Event.Test43_Letter) |
? |
????????????????????msg.text = "当前输入的是字母"; |
? |
????????????????else if(event.type==Test43Event.Test43_Number) |
? |
????????????????????msg.text = "当前输入的是数字"; |
? |
????????????????else if(event.type==Test43Event.Test43_Other) |
? |
????????????????????msg.text = "当前输入的是其他字符"; |
? |
????????????protected function application1_creationCompleteHandler(event:FlexEvent):void |
? |
????????????????this.addEventListener(Test43Event.Test43_Letter,func1); |
? |
????????????????this.addEventListener(Test43Event.Test43_Number,func1); |
? |
????????????????this.addEventListener(Test43Event.Test43_Other,func1); |
? |
????????<!-- 将非可视元素(例如服务、值对象)放在此处 --> |
? |
????<s:TextInput id="text1" x="140" y="157" keyDown="textinput1_keyDownHandler(event)"/> |
? |
????<s:Label id="msg" x="140" y="128"/> |
?
2.方式二:直接使用dispatchEvent编写Flex4的自定义事件
? |
<?xml version="1.0" encoding="utf-8"?> |
? |
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"? |
? |
???????????????xmlns:s="library://ns.adobe.com/flex/spark"? |
? |
???????????????xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)"> |
? |
????????<s:BasicLayout/> |
? |
????????????import mx.events.FlexEvent; |
? |
????????????protected function application1_creationCompleteHandler(event:FlexEvent):void |
? |
????????????????this.addEventListener("Letter",func1); |
? |
????????????????this.addEventListener("Other",func1); |
? |
????????????private function func1(event:Event):void |
? |
????????????????if(event.type == "Letter") |
? |
????????????????????msg.text = "当前选择的是字母"; |
? |
????????????????????msg.text = "当前选择的不是字母"; |
? |
????????????protected function textinput1_keyDownHandler(event:KeyboardEvent):void |
? |
????????????????if(event.keyCode>=65 && event.keyCode<=90)??? //a-z A-Z |
? |
????????????????????dispatchEvent(new Event("Letter")); |
? |
????????????????????dispatchEvent(new Event("Other")); |
? |
????????<!-- 将非可视元素(例如服务、值对象)放在此处 --> |
? |
????<s:TextInput x="180" y="179" keyDown="textinput1_keyDownHandler(event)"/> |
? |
????<s:Label x="179" y="143" id="msg"/> |