1

2 つのキャンバスを定義した Flex の小さなアプリケーションがあります。そのうちの 1 つでコントロールを追加し、もう 1 つは何かを描画するために使用され、コントロールは追加されません。

<mx:Canvas x="0" y="80" width="100%" height="520%" id="Canvas1"/>
<mx:Canvas x="0" y="0" width="100%" height="80" id="Canvas2"/>

アプリケーションに処理されるキーダウン イベントを追加しますが、最初のキャンバス (コントロールが追加されたもの) をマウスでクリックした後にのみトリガーされます。そうしないと、キーが押されたときにイベントがトリガーされません。

私はいくつかのことを試しました: 2 番目のキャンバスにフォーカスを設定する、キーダウン ハンドラーをアプリケーション (this)、ステージ、キャンバスに追加する... 残念ながら、フォーカスがどこにあってもキーダウンをトリガーする解決策が見つかりませんでした。 .

4

2 に答える 2

1

これはフレックス4用です。

<?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"
            name="MyApp"
            width="480" height="480"
            creationComplete="init();">

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
    <![CDATA[
        public function init():void
        {
            trace("init");
            this.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); 
        }

        private function keyDown(event:KeyboardEvent):void
        {
            trace(event.charCode);
        }       
</fx:Script></s:Application>
于 2010-12-16T16:18:54.337 に答える
0

あなたが説明した最初の問題 (KeyboardEvents がディスパッチされる前にマウスをクリックする必要がある) は、ブラウザーが Flex アプリケーション自体にフォーカスを与えていないことが原因である可能性があります。HTML ラッパーで Javascript を使用して、「body」要素の「onLoad」イベントで Flex アプリにプログラムでフォーカスを与えることができます。これが Firefox で機能することは確かですし、IE でも問題なく機能すると思います。関連する Javascript コードを掘り下げてみます。

2 番目の問題に関しては、すべての KeyboardEvents をキャッチするために、Application.application にイベント リスナーを追加しようとしましたか?

于 2009-05-27T17:40:54.420 に答える