gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

キーイベントの取得 追記

なんとびっくり。Window全体…つまり

application.addEventListener(FlexEvent.ENTER , keyHandler);

は、ダメポであることが判明。
コンパイルエラーは出てこないんだけど、取得も出来ないっぽ orz*1
addEventListenerしていいのは、とりあえず現状わかってるので mx:TextInput 。ほかはしらにゃい〜
サンプルコードおいとくわ。


mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="onComplete()">

<!-- *********************************** -->
<mx:Script source="base.as" />

<mx:VBox id="vvv">

<!-- 実験君 -->
<mx:TextInput id="a_txt" enter="onEnter()" text="ほげほげ" />
<mx:Script>
import mx.controls.Alert;

private function onEnter():void {
  trace("test 1");
Alert.show("test 1");
}
</mx:Script>

<!-- *********************************** -->

<mx:TextInput id="ti" width="200" imeMode="JAPANESE_HIRAGANA"  />

<mx:Label id="l1" />
<mx:Label id="l2" />

</mx:VBox>
	
</mx:Application>


base.as
(色々実験してるので、余計なimportは気にすんなw)

// ActionScript file
import flash.media.Sound;
import flash.net.URLRequest;
import flash.utils.Timer;

import mx.controls.Alert;
import mx.controls.Label;
import mx.events.FlexEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;

private var external_val:String;

private function onComplete():void{

trace ("onC");
Alert.show( "onC" );

  ti.setFocus(); 
  focusManager.setFocus(ti);

  //
  //application.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
  //ti.addEventListener(KeyboardEvent.KEY_UP, keyHandler2);
  //application.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
  //ti.addEventListener(mx.events.FlexEvent.ENTER , keyHandler2);
  //application.addEventListener(mx.events.FlexEvent.ENTER , keyHandler);
  //ti.addEventListener("enter" , keyHandler2);
  //
  ti.addEventListener(FlexEvent.ENTER , keyHandler2);
  application.addEventListener(FlexEvent.ENTER , keyHandler);

}

//private function keyHandler(event:KeyboardEvent):void {
private function keyHandler(e:FlexEvent):void {
  //Alert.show( event.keyCode + "/" + event.charCode );
  //trace( event.keyCode + "/" + event.charCode );
  trace( "event 1");
}

//private function keyHandler2(event:KeyboardEvent):void {
private function keyHandler2(e:FlexEvent):void {
  //Alert.show( "2:" + event.keyCode + "/" + event.charCode );
  //trace( "2:" + event.keyCode + "/" + event.charCode );
  Alert.show(" event 2" );
  trace( "event 2");
  trace ( e );
}


とりあえず。部品系のコンポーネントぢゃないと取得できないんだとすると…「どのコントロールなら行けるのか」、そのうち調べ尽くさないと、かも。

*1:なんかミスってたら誰か突っ込んで〜