2009-08-17 4 views
0

Je travaille sur une application et je construis un composant "Clavier" pour cela. Il y a 30 touches sur le clavier et il ne semble pas logique de créer un gestionnaire d'événements pour chaque bouton. Lorsque le bouton est cliqué, son étiquette doit être envoyée à une fonction qui l'ajoute à un champ de saisie de texte. Dois-je simplement créer un "click = SomeFunction (Button.label)" pour chaque bouton ou y a-t-il un moyen plus puissant/plus rapide/moins puissant pour le faire?Application clavier - Meilleure façon d'avoir plusieurs boutons pour ajouter une lettre à l'entrée de texte? Utiliser des gestionnaires d'événements?

Répondre

3

il y a un moyen beaucoup plus facile. Vous pouvez étendre le composant du bouton et créer un clic par défaut, même si celui-ci se remplit de bulles. Vous pouvez ensuite avoir le composant parent à l'écoute de l'événement. Voici un exemple rapide:

myButton.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Button xmlns:mx="http://www.adobe.com/2006/mxml" 
    click="clickKeyHandler(event);"> 

    <mx:Metadata> 

     [Event(name="keyboardClickEvent", type="com.KeyboardEvent")] 
    </mx:Metadata> 

    <mx:Script> 
     <![CDATA[ 

      import com.KeyboardEvent; 

      protected function clickKeyHandler(event:MouseEvent):void{ 


       dispatchEvent(new KeyboardEvent(this.label)); 
      } 
     ]]> 
    </mx:Script> 
</mx:Button> 

com.KeyboardEvent:

package com 
{ 
    import flash.events.Event; 

public class KeyboardEvent extends Event 
{ 

    public static const KEYBOARD_CLICK_EVENT:String = "keyboardClickEvent"; 

    private var _value:String; 

    public function get value():String{ 

     return _value; 

    } 
    public function KeyboardEvent(value:String = "") 
    { 

     super(KEYBOARD_CLICK_EVENT, true); 

     _value = value; 
    } 


    override public function clone() : Event { 
     return new KeyboardEvent(_value); 
    } 

    } 

} 
utilisation

en application:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" creationComplete="initApp();" xmlns:local="*"> 


    <mx:Script> 
     <![CDATA[ 

      import com.KeyboardEvent; 

      private function initApp():void{ 


       this.addEventListener(KeyboardEvent.KEYBOARD_CLICK_EVENT, keyboardHandler); 

      } 


      private function keyboardHandler(event:KeyboardEvent):void{ 

       trace(event.value); 
      } 
     ]]> 
    </mx:Script> 

    <local:myButton label="1" /> 
    <local:myButton label="2" /> 
    <local:myButton label="3" /> 
    <local:myButton label="4" /> 
</mx:Application> 
+0

est la ligne « retour nouvelle CompactReportEvent (_valeur);" Censé pour dire "return new keyboardEvent (_value);" au lieu? – Seidleroni

+0

opps oui. désolé j'ai copié un collé et raté que 1 – Shua

+0

je suis allé à travers et a fixé l'exemple. – Shua

Questions connexes