我在flex中有一个小应用程序,我在其中定义了两个画布。其中一个我添加了控件,另一个用来绘制一些东西,没有添加任何控件:
<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)、stage、canvas……不幸的是,无论焦点在哪里,我都没有找到触发快捷键的解决方案。
发布于 2010-12-17 00:18:54
这是针对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>发布于 2009-05-27 17:40:54
您描述的第一个问题(在调度任何KeyboardEvents之前必须单击鼠标)很可能是由于浏览器没有将焦点放在Flex应用程序本身上。您可以在HTML包装器中使用Javascript,以编程方式将焦点放在"body“元素的"onLoad”事件上。我确信这在Firefox中是有效的,我相信在IE中也是如此。我会试着找出相关的Javascript代码。
至于第二个问题,有没有尝试过在Application.application中添加一个事件侦听器来捕获所有的KeyboardEvents?
https://stackoverflow.com/questions/917034
复制相似问题