我想在我的应用程序中全局处理keydown事件,因此已将事件处理程序添加到显示列表中最顶层的DisplayObject。但是,除非光标焦点位于Textbox或Datagrid等上,否则事件似乎不会触发。
如何通过应用程序全局处理按键操作?
答案 0 :(得分:2)
作为对上述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>
答案 1 :(得分:1)
stage.addEventListener(...)
?
答案 2 :(得分:0)
首先,在Flex应用程序获得焦点之前,您不会检测到任何击键。 您可以通过在启动时调用js脚本来自动执行此操作,该脚本将重点放在应用程序上
完成后,我建议您在systemManager上添加密钥监听器。这样做可以让你全局处理keydown事件。
答案 3 :(得分:0)
ExternalInterface.call('function browserFocus(){document.getElementById(\'APPLICATION_NAME_HERE\').focus();}');
这仅适用于IE和Opera。