Прослушиватель событий, не прослушивающий событие клавиатуры в модуле - PullRequest
0 голосов
/ 08 июля 2011

Я делаю это внутри модуля, содержащего стеки просмотра и их дочерние элементы. Вызов onInit () при создании полного модуля.

Когда я нахожусь внутри одного из дочерних элементов стека просмотра этого модуля и нажимаю Enter, он вообще не вызывает функцию слушателя (bp внутри этого не получает удар).

private function onInit():void{
 this.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
}

private function keyPressed(evt:KeyboardEvent):void
           {//this breakpoint never gets hit on pressing a key in screen
               if (evt.keyCode == Keyboard.ENTER)
               {
                //do this   
                   }               
           }

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Это может быть очень неприятно, так как на это могут повлиять несколько факторов.

1) Добавьте слушателей событий в соответствующем месте.Код, который у вас есть, подходит для захвата, просто убедитесь, что он находится в родительском или выше месте, где запускаются события.

2) Вы должны убедиться, что у вас есть фокус.Это обычно проблема, с которой сталкиваются люди, и она есть в документах, но не сразу ясно.Если вы посмотрите здесь ссылку на живой документ и выполните поиск setFocus () - вы заметите, что она есть в каждом из их примеров (кроме top, который не работает!) - но они никогда не упоминают об этомв реальной документации на странице.

http://livedocs.adobe.com/flex/3/html/help.html?content=events_11.html

Так что, даже в их первом примере, если вы нажмете на приложение (а не на текстовое поле), оно не будет работать!

<?xml version="1.0"?>
<!-- events/TrapAllKeys.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();">
<mx:Script><![CDATA[
    private function initApp():void {
        application.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
    }

    private function keyHandler(event:KeyboardEvent):void {
        t1.text = event.keyCode + "/" + event.charCode;
    }
]]></mx:Script>

<mx:TextInput id="myTextInput"/>

<mx:Text id="t1"/>

</mx:Application>

Если, однако, вы сами установите фокус, изменив функцию инициализации следующим образом, это будет!

private function initApp():void {
        application.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
        myTextInput.setFocus();
    }

Еще один прием для проверки, если это ваша проблема, - добавить текстовое поле в видедочерний элемент контейнера, который захватывает, если они волшебным образом работают после того, как вы щелкнете в этом текстовом поле - это действительно проблема фокуса!

=)

1 голос
/ 08 июля 2011

Вы должны добавить ключевых слушателей к объектам сцены:

private function onInit():void{
    this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
}
...