一、   使用事件
Flex中使用事件是一个分两步走的过程。首先你要编写一个函数或一个类方法,作为一个响应事件的监听器或处理器。这个函数通常会访问Event对象的属性或一些其他的程序设定状态。这个函数片段通常包含一个被传入的、指定为Event类型的参数。
 
         下面的例子展示了一个简单的事件监听函数,当一个控件触发事件的时候,这个监听函数会就会报告:
 
<!-- events/SimpleEventHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();">
<mx:Script><![CDATA[
import mx.controls.Alert;
private function initApp():void {
b1.addEventListener(MouseEvent.CLICK, myEventHandler);
}
private function myEventHandler(event:Event):void {
Alert.show("An event occurred.");
}
]]></mx:Script>
<mx:Button id="b1" label="Click Me"/>
</mx:Application>
        
         就像在这个例子中你所看到的,你还通过使用addEventListener()方法为一个显示列表对象注册了函数或类方法。
 
         多数Flex控件通过在MXML标签中指定监听器来简化监听器的注册。例如,在Button控件的click事件上指定一个监听函数:
 
<!-- events/SimplerEventHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import mx.controls.Alert;
private function myEventHandler(event:Event):void {
Alert.show("An event occurred.");
}
]]></mx:Script>
<mx:Button id="b1" label="Click Me" click="myEventHandler(event)"/>
</mx:Application>
 
         这相当于在前面那个例子中的addEventListener()方法。不过,最佳实践还是使用addEventListener()方法。这个方法给通过允许你配置优先级和捕获设而给予你更大的控制能力。除此之外,如果你使用addEventListener()方法来添加一个事件处理器,那么在不需要时你就可以使用removeEventListener()方法来移除这个事件处理器。但如果是在标签中添加的事件监听器,就不能调用removeEventListner()方法。
 
         每当一个组件生成一个Flex就会创建一个包含了关于事件信息的Event对象,包括事件类型以及调度控件的引用。要使用这个Event对象,你需要指定它作为事件处理器函数的一个参数。如下所示:
 
<?xml version="1.0"?>
<!-- events/EventTypeHandler.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import mx.controls.Alert;
private function myEventHandler(e:Event):void {
Alert.show("An event of type '" + e.type + "' occurred.");
}
]]></mx:Script>
<mx:Button id="b1" label="Click Me" click="myEventHandler(event)"/>
</mx:Application>
 
         如果希望在MXML标签中定义的监听器内使用Event对象,就必须在 MXML标签显式地中添加event关键字来将它传递给处理器。如下所示:
 
<mx:Button id="b1" label="Click Me" click="myEventHandler(event)"/>
 
         在处理函数中,你并非必须要使用Event对象。下面的例子创建了两个事件处理函数,并将它们注册到一个ComboBox控件的事件上。第一个事件处理器,openEvt(),不需要任何参数。第二个处理器,changeEvt(),持有Event对象参数并且使用Event对象来访问selectedIndex的值。
 
<!-- events/MultipleEventHandlers.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
private function openEvt():void {
forChange.text="";
}
private function changeEvt(e:Event):void {
forChange.text =
"Value: " + e.currentTarget.value + "\n" +
"Index: " + e.currentTarget.selectedIndex;
}
]]></mx:Script>
<mx:ComboBox open="openEvt()" change="changeEvt(event)">
<mx:dataProvider>
<mx:Array>
<mx:String>AK</mx:String>
<mx:String>AL</mx:String>
<mx:String>AR</mx:String>
</mx:Array>
</mx:dataProvider>
</mx:ComboBox>
<mx:TextArea id="forChange" width="150" height="100"/>
</mx:Application>