處理事件

每個組件會在使用者與它進行互動時廣播事件。例如,當使用者按一下 Button 後,它會送出 MouseEvent.CLICK 事件,而當使用者選取「清單」中的項目時,該「清單」也會送出事件。 CHANGE 事件。當組件發生重大事項時也會產生事件,例如完成載入 UILoader 實體的內容時就會產生 Event.COMPLETE 事件。若要處理事件,您可以撰寫 ActionScript 程式碼,在事件發生時加以執行。

組件的事件包括任何組件繼承之類別所產生的事件。這就表示所有 ActionScript 3.0「User Interface」組件都會繼承 UIComponent 類別的事件,因為它是 ActionScript 3.0「User Interface」組件的基底類別。若要查看組件廣播的事件清單,請參閱 適用於 Adobe Flash Platform 的 ActionScript 3.0 參考 中的 Events 區段。

如需 ActionScript 3.0 事件處理的完整說明,請參閱「ActionScript 3.0 程式設計」。

關於事件偵聽程式

下列重點適用於處理 ActionScript 3.0 組件的事件:

  • 所有事件都由組件類別的實體進行廣播。這個組件實體就是「廣播程式」。

  • 註冊事件「偵聽程式」的方式是為組件實體呼叫 addEventListener() 方法。例如,下列程式碼行會為 Button 實體 aButton 加入 MouseEvent.CLICK 事件的偵聽程式:

    aButton.addEventListener(MouseEvent.CLICK, clickHandler);

    addEventListener() 方法的第二個參數會註冊事件發生時所要呼叫的 clickHandler 函數名稱。這個函數也稱為「回呼函數」。

  • 您可以將多個偵聽程式註冊到一個組件實體。

    aButton.addEventListener(MouseEvent.CLICK, clickHandler1); 
    aButton.addEventListener(MouseEvent.CLICK, clickHandler2);
  • 您可以將一個偵聽程式註冊到多個組件實體。

    aButton.addEventListener(MouseEvent.CLICK, clickHandler1); 
    bButton.addEventListener(MouseEvent.CLICK, clickHandler1);
  • 事件處理常式函數傳遞目標的事件物件中包含事件類型以及廣播事件之實體的相關資訊。如需詳細資訊,請參閱 關於事件物件

  • 在終止應用程式或是使用 removeEventListener() 方法明確地將偵聽程式移除之前,偵聽程式仍會保持在作用中。例如,下列程式碼行會移除 aButton MouseEvent.CLICK 事件偵聽程式:

    aButton.removeEventListener(MouseEvent.CLICK, clickHandler);

關於事件物件

事件物件是繼承自 Event 物件類別,而且其屬性中包含已發生的事件資訊,包括提供必要事件資訊的 target type 屬性:

屬性

說明

type

字串,表示事件的類型。

target

廣播事件之組件實體的參考。

當事件具有其他屬性時,這些屬性會列在 適用於 Adobe Flash Platform 的 ActionScript 3.0 參考 中的事件類別說明。

事件物件是在事件發生時自動產生的,並且會傳遞給事件處理常式函數。

您可以使用函數內的事件物件來存取已廣播事件的名稱,或是廣播事件的組件實體名稱。您可以從實體名稱存取其它組件屬性。例如,下列程式碼會使用 evtObj 事件物件的 target 屬性來存取 aButton label 屬性,並且將它顯示在「輸出」面板中:

import fl.controls.Button; 
import flash.events.MouseEvent; 
 
var aButton:Button = new Button(); 
aButton.label = "Submit"; 
addChild(aButton); 
aButton.addEventListener(MouseEvent.CLICK, clickHandler); 
 
function clickHandler(evtObj:MouseEvent){ 
trace("The " + evtObj.target.label + " button was clicked"); 
}