2009-09-03 8 views
1

J'ai une application flexible avec beaucoup de composants personnalisés, comme des boutons personnalisés, des comboBoxes, etc. J'essaie d'ajouter des raccourcis keyBoard à l'application flexible. Ce faisant, j'ai ajouté un écouteur de touche vers le bas à l'application pour écouter ctrl+shift combinaison de touches comme ceci:Ajout de raccourcis clavier à une application flexible

this.stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); 

je distribue un événement personnalisé que tous mes composants personnalisés sont à l'écoute pour:

private function reportKeyDown(event:KeyboardEvent):void 
{ 
    var evtObj:Object = new Object(); 
    evtObj.keyEvent = event; 
    dispatchEvent(new CustomEvent(CustomEvent.SHORTCUT_KEYS_PRESSED, evtObj, true, false)); 
} 

Dans mon composant bouton personnalisé J'ai:

this.addEventListener(CustomEvent.SHORTCUT_KEYS_PRESSED, ShortCutKeysHandler, true); 

donc, si je ctrl+shift+W alors je veux une instance du bouton personnalisé pour obtenir cliqué.

Pour une raison quelconque, l'événement n'est jamais déclenché et n'atteint jamais la fonction ShortCutKeysHandler.

Est-ce que quelqu'un sait comment faire cela?

Répondre

2

Je suppose que votre événement ne bouillonne pas aux auditeurs. Si vous recherchez strictement des événements de clavier et n'avez pas besoin de charge supplémentaire, il serait peut-être plus efficace d'écouter les événements de scène dans vos composants intéressés, ou bien d'envoyer votre événement personnalisé et d'utiliser stage.addEventListener dans vos composants intéressés au lieu de this.addEventListener.

En tant que convention, je jamais compter sur le barbotage d'événements. Il obscurcit votre application et crée une ambiguïté. Il est préférable de définir explicitement la structure de votre événement pour obtenir un contrôle supplémentaire de votre application et faciliter le débogage.

Questions connexes