mx.controls.RadioButton

  • warning: array_map(): Argument #2 should be an array in /var/www/titouille.ch/www/modules/system/system.module on line 1050.
  • warning: array_keys() expects parameter 1 to be array, null given in /var/www/titouille.ch/www/includes/theme.inc on line 1845.
  • warning: Invalid argument supplied for foreach() in /var/www/titouille.ch/www/includes/theme.inc on line 1845.
Portrait de titouille

Un petit exemple vite fait pour comprendre l'utilisation des contrôles 'RadioButton'.

Quelques utilisations un peu spéciales, notamment au niveau de la classe 'Delegate', qui permet d'exécuter une fonction dans une portée précise... explication : lorsqu'on ajoute un gestionnaire 'click' à un bouton, le code situé dans la fonction de réception s'exécute dans la portée du bouton. Le Delegate permet d'exécuter la fonction dans la portée qu'on décide, en général la portée de l'objet qui accueille le bouton (la scène, dans mon exemple).

Au niveau des RadioButton, on peut voir qu'il possède les propriétés data, label, radioGroup, selected et labelPlacement.
Les propriétés intéressantes sont 'data', 'radioGroup' et 'selected'.

La propriété 'data' permet de spécifier une 'constante' qui sera unique pour chaque bouton radio. Par exemple, si on utilise les boutons radio pour créer un vote avec 5 objets, qui permettent de donner une note de 1 à 5, on pourra utiliser les valeurs numérique pour le champs data, en appliquant à chaque contrôle sa valeur correspondante.
La propriété 'radioGroup' permet de spécifier le groupe auquel appartient le contrôle. Ce qui permet de grouper plusieurs instances de RadioButton, et de gérer la sélection sur 1 seul contrôle à la fois.
Enfin, la propriété 'selection' permet de mettre la sélection sur le bouton radio voulu.

Le code suivant permet d'afficher les informations contenues dans les instances de RadioButton et dans l'instance RadioGroup. Ce code est à placer dans un nouveau fla, qui doit comprendre dans sa bibliothèque un contrôle RadioButton et un contrôle 'Button'.

import mx.controls.RadioButton;
import mx.controls.Button;
import mx.utils.Delegate;
//
// création des contrôles
//
var cbt:Button = Button( 
        this.createClassObject( mx.controls.Button, 'cbt', 1 ) );
cbt.label = 'Show radioGroup infos';
cbt.setSize( 200, 22 );
cbt.move( 10, 10 );
//
var crbAfter:RadioButton = RadioButton( 
        this.createClassObject( mx.controls.RadioButton, 'crbAfter', 2 ) );
crbAfter.data = 'after';
crbAfter.label = '[crbAfter]';
crbAfter.groupName = 'childOf';
crbAfter.selected = true;
crbAfter.move( 10, 40 );
//
var crbChildOf:RadioButton = RadioButton( 
        this.createClassObject( mx.controls.RadioButton, 'crbChildOf', 3 ) );
crbChildOf.data = 'childof';
crbChildOf.label = '[crbChildOf]';
crbChildOf.groupName = 'childOf';
crbChildOf.selected = false;
crbChildOf.move( 110, 40 );
//
// ajout des gestionnaires
//
crbAfter.addEventListener('click', Delegate.create( this, crbClick ) );
crbChildOf.addEventListener('click', Delegate.create( this, crbClick ) );
cbt.addEventListener( 'click', Delegate.create( this, cbtClick ) );
 
// gestionnaire RadioButton
//
function crbClick( evt ):Void
	{
	trace( '' );
	trace( 'selection on radio button : ' )
	for (var val:String in evt)
		trace( "    " + val + " :: " + evt[val] );
	}
 
// gestionnaire Button
//
function cbtClick( evt ):Void
	{
	trace( '' );
	trace( '---- display info of radioGroup object ----' )
	// childOf is the name of the radio group
	//
	for (var val:String in childOf)
		if( typeof( childOf[val] ) != "function" )
		trace( "    " + val + " :: " + childOf[val] );
	trace( '' );
	trace( 'selected data : ' );
	trace( childOf.selectedRadio.data );
	}




Attention, les caractères guillemets (simples et soubles) ne passent pas ! Voilà le code revu :

import mx.controls.RadioButton;
import mx.controls.Button;
import mx.utils.Delegate;
//
// création des contrôles
//
var cbt:Button = Button (this.createClassObject (mx.controls.Button, 'cbt'

Portrait de titouille

merci, c'est bien gentil d'avoir fait la correction. c'est bizarre, je n'avais pas encore remarqué ce problème...