1

我在 flex 中有一个小型应用程序,其中定义了 2 个画布。在其中一个上我添加了控件,另一个用于绘制某些东西并且没有添加控件:

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

我添加了一个处理到应用程序的 keydown 事件,但只有在我用鼠标单击第一个 Canvas(已添加控件的那个)后才会触发它。否则,按下按键时不会触发事件。

我尝试了几件事:将焦点设置在第二个画布上,将 keydown 处理程序添加到应用程序(this)、舞台、画布......不幸的是,无论焦点在哪里,我都没有找到触发 keydown 的解决方案.

4

2 回答 2

1

这是针对 flex 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 以编程方式将焦点放在 Flex 应用程序的“body”元素的“onLoad”事件上。我确定这在 Firefox 中有效,我相信它在 IE 中也可以正常工作。我将尝试挖掘相关的 Javascript 代码。

至于第二个问题,是否尝试将事件侦听器添加到 Application.application 以捕获所有键盘事件?

于 2009-05-27T17:40:54.420 回答