Flex Catch Keydown

时间:2010-04-07 02:55:07

标签: flex actionscript-3 actionscript

我想在我的应用程序中全局处理keydown事件,因此已将事件处理程序添加到显示列表中最顶层的DisplayObject。但是,除非光标焦点位于Textbox或Datagrid等上,否则事件似乎不会触发。

如何通过应用程序全局处理按键操作?

4 个答案:

答案 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。