2011-07-29 8 views
1

私はアプリケーションタイムアウト機能(flex4)を実装しています。私が見つけたのは、私が聞いたマウスとキーボードのイベントです:PopUpManagerでマスクされたマウスイベントとキーボードイベントの取得方法

FlexGlobals.topLevelApplication.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity); 
FlexGlobals.topLevelApplication.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity); 

は、ポップアップウィンドウの存在によってマスクされています。コードはコンストラクタ内のコンポーネント内にあります。コンポーネントがブロック内のメインアプリケーションに追加されます。

これらのシステム生成イベントを、PopUpManager表示オブジェクトによって停止されないようにするにはどうすればよいですか?

ありがとうございます!

+0

これも私が直面していた問題です。当分の間、私はすべてのポップアップをコレクションに入れておき、タイムアウトのためにイベントリスナーを追加しています。 –

答えて

3

topLevelApplicationではなくStageでリッスンしてみてください。

(FlexGlobals.topLevelApplication as Application).stage.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity); 
(FlexGlobals.topLevelApplication as Application).stage.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity); 

更新:

に入れたままにしてください、私はあなたがこのような何かをする必要がありますので、topLevelApplicationが正式にオブジェクトを返すと思いますtopLevelApplication

stage propertyを使用して、ステージにアクセスそのコンポーネントのcreationCompleteイベントが発生するまでステージがtopLevelApplicationに設定されていないことに注意してください。イベントリスナーを非UIクラスのステージに追加する場合は、 topLevelApplicationでcreationCompleteが起動するまでこれが行われていないことを確認する必要があります。

これを行うには、コンストラクタのtopLevelApplicationのcreationCompleteメソッドにイベントリスナーを追加します。

(FlexGlobals.topLevelApplication.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationCompete); 

これがMXML UIComponentの場合は、そのコードをコンストラクタの代わりにpreinitializeイベントハンドラに追加できます。

次に、この創造完全なハンドラを次のようになります。

public function onCreationComplete(event:FlexEvent):void{ 
    (FlexGlobals.topLevelApplication as Application).stage.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity); 
    (FlexGlobals.topLevelApplication as Application).stage.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity); 
} 
+0

1120:未定義のプロパティへのアクセスアプリケーション。ステージに..ステージを追加するだけで、 'キャスティング'をしなくても動作しません...コンパイルされますが、ランタイムがクラッシュします。 – reidLinden

+0

@reidLindenいつリスナーを追加していますか? StageはcreationCompleteが実行されるまで定義されません。 – JeffryHouser

+0

私のコードはコンストラクタ内のコンポーネントにあります。コンポーネントはメインアプリケーションのブロックに追加されます。 – reidLinden

1

これはのcreationCompleteの手を煩わせることなく、よりエレガントに動作します。

FlexGlobals.topLevelApplication.systemManager.addEventListener(MouseEvent.MOUSE_MOVE, resetSessionTimer); 
FlexGlobals.topLevelApplication.systemManager.addEventListener(KeyboardEvent.KEY_DOWN, resetSessionTimer); 
関連する問題