2009-05-11 11 views
0

Je dois créer plusieurs vbox dans un pour chaque boucle. Maintenant, je veux faire quelque chose comme ça.Comment créer une variable dynamique vbox dans actionscript

formsArray ["vb" + compteur] = nouvelle VBox; FormsArray ["vb" + compteur] .visible = true

ajouter des étiquettes etc.

Je ne peux pas cette chose à travailler. Quelqu'un a-t-il une idée de comment créer des noms de variables dynamiques pour mes vbox-es?

Merci

Répondre

0

Tout d'abord, d'utiliser un tableau associatif, vous devez utiliser un objet et non un tableau (peut-être vous êtes déjà, l'esprit alors jamais).

Vous pouvez réaliser ce que vous voulez faire de la façon suivante:

var vbox:VBox; 
var formsArray:Object = new Object(); 
var counter:int = 0; 

for each(<statement>) 
{ 
    vbox = new VBox(); 
    formsArray[("vb" + counter.toString())] = vbox; 
    counter++; 
} 

propriété visible du VBox est true par défaut, donc pas besoin de définir explicitement.

Réponse à la question supplémentaire dans les commentaires:

Vous avez vraiment pas besoin d'utiliser des références dynamiques pour faire ce que vous voulez faire. Vous feriez mieux de créer un composant personnalisé pour cela, en étendant la classe VBox, en créant une nouvelle classe MXML avec VBox comme balise racine. Quelque chose le long de ces lignes:

<mx:VBox ... > 

    <mx:Button ... click="btnClickHandler()"/> 
    <mx:Script> 
     <![CDATA[ 

      // Toggles visibility of the VBox 
      private function btnClickHandler():void 
      { 
       visible = !visible; 
      } 

     ]]> 
    </mx:Script> 

</mx:VBox> 

Ensuite, vous pouvez simplement instancier autant de ces VBox personnalisés que vous avez besoin. Cependant, rendre la VBox invisible rendra également le bouton contenu invisible, ce qui rendra difficile de cliquer à nouveau dessus. :) Vous voulez probablement aborder cela. Quoi qu'il en soit, j'espère que cela vous dirigera dans la bonne direction.

+0

merci pour votre réponse rapide, pas sûr que cela fonctionne parce que: ajouter une BTN à la Vbox btn.addEventListener (MouseEvent.CLICK, function(): void {openEdit (formsArray [("vb" + counter.toString())]), false); Lorsque j'appuie sur le bouton je veux (par exemple) voir l'état visible. donc je fais quelque chose comme fonction privée openEditAccount (vb2: VBox): void \t \t { \t \t \t \t Alert.show (vb2.visible.toString()); } Qu'est-ce que je fais de mal? –

+0

Je suis désolé, mais je ne comprends pas très bien votre commentaire. Je suppose que vous êtes habitué à coder dans JS, à en juger par la façon dont vous essayez d'ajouter une fonction de gestionnaire d'événement dynamique. Ce n'est probablement pas la meilleure façon de faire les choses. Pourriez-vous expliquer ce que vous essayez de faire et expliquer un peu le problème que vous rencontrez? Vous pouvez même créer une nouvelle question pour cela. Votre question originale devrait être entièrement résolue par la réponse fournie. – Stiggler

+0

* je crée dynamique vbox-es * chaque vbox a un bouton * lorsque vous appuyez sur le bouton vous devez aller à une fonction (pas en JS) qui rend votre vbox visible ou invisible * donc je veux donner la fonction un paramètre avec le nom de la vbox, ou bien je ne sais pas quel bouton est enfoncé. (c'est pourquoi je fais la chose étrange avec le MouseEvent.CLICK, function(): void {openEdit (formsArray [("vb" + compteur.toString())]), false J'espère que vous me comprenez ... je suis un peu perdu. Cordialement, Jaq –

Questions connexes