我希望在我的应用程序中全局处理keydown事件,并因此将事件处理程序添加到显示列表中最顶部的DisplayObject。但是,该事件似乎不会触发,除非光标焦点位于文本框或Datagrid等上。
如何让应用程序全局地处理按键?
发布于 2010-04-07 11:02:30
stage.addEventListener(...)?
发布于 2011-07-20 15:18:43
作为对上述OP注释的响应,这里介绍了如何正确地将其挂钩,即在应用程序的creationComplete事件中:
<?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" minWidth="955" minHeight="600"
creationComplete="initApp();">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.managers.SystemManager;
public function initApp():void {
systemManager.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown)
}
public function onKeyDown(event:KeyboardEvent):void {
pressedKey.text = event.charCode.toString();
}
]]>
</fx:Script>
<mx:Label x="486" y="63" text="You pressed: "/>
<mx:Label id="pressedKey" x="577" y="58" width="122" text=""/>
</s:Application>发布于 2010-04-07 16:57:45
首先,在flex应用程序获得焦点之前,您不会检测到任何击键。您可以通过在启动时调用js脚本自动完成此操作,该脚本将焦点设置在应用程序上
完成后,我建议您在systemManager上添加您的关键侦听器。这样做将允许您全局处理keydown事件。
https://stackoverflow.com/questions/2589724
复制相似问题