2010-11-12 4 views
0

J'essaie d'arrêter un bouton à bascule de changer d'état lorsque l'on clique, en fonction de certaines conditions, mais je ne suis pas sûr de savoir comment le faire. C'est possible?Comment arrêter un bouton à bascule de changer d'état

Je ne veux pas désactiver le bouton, car les styles flex 3 ne me permettent pas d'obtenir l'effet visuel dont j'ai besoin.

EDIT:

J'ai essayé cela, mais il ne fonctionne pas:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
creationComplete="_init()"   
> 
<mx:Button label="toggle" id="button" toggle="true"/> 
<mx:Script> 
<![CDATA[ 
import mx.events.FlexEvent; 

private function _init():void{ 

    button.addEventListener(FlexEvent.BUTTON_DOWN, preventDef, true, 50); 
    button.addEventListener(MouseEvent.CLICK, preventDef, true, 50); 
    button.addEventListener(Event.CHANGE, preventDef, true, 50); 
    button.addEventListener(MouseEvent.MOUSE_DOWN, preventDef, true, 50); 
    button.addEventListener(MouseEvent.MOUSE_UP, preventDef, true, 50); 
} 

private function preventDef(e:Event):void{ 
    e.preventDefault(); 
} 
]]> 
</mx:Script> 
</mx:Application> 

Répondre

2

Si cela vous aide, vous pouvez utiliser la case à cocher pour obtenir un effet de basculement. Cependant, si vous insistez sur l'aide d'un bouton à bascule pour cette question, vous devez vous inscrire un événement de changement de votre bouton, puis, après vos calculs appellent

event.preventDefault(); 
méthode

sur votre objet MouseEvent pour l'empêcher d'être basculée ou ne pas.

+0

Salut sebgymn, voir mon édition. Je pense que je l'applique correctement. – cammil

0

Si vous n'avez pas besoin d'un bouton à bascule, alors pourquoi ne pas utiliser un bouton normal?

2

Sous ToggleButton, la méthode de remplacement buttonReleased:

override protected function buttonReleased():void { 
    if(dispatchEvent(new FlexEvent(FlexEvent.CHANGING, false, true))) 
     super.buttonReleased(); 
} 

Il est important de mettre événement envoyé annulables.

Ajoutez à votre bouton deux écouteurs. Event.CHANGE et FlexEvent.CHANGING. Pour le gestionnaire CHANGING, faites vos calculs et appelez preventDefault si nécessaire.

private function verifyChange(e:FlexEvent):void { 
    if (shouldPreventToggle()) 
     e.preventDefault(); 
} 
+0

Je ne peux pas croire que ToggleButton/ToggleButtonBase n'a pas un événement CHANGING? Cela devrait être dans le SDK Flex 4. –

Questions connexes