IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Label créé dynamiquement


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 248
    Par défaut Label créé dynamiquement
    Bonjour!
    Vos compétences pourraient me sortir (encore une fois) du gouffre dans lequel je me mets assez fréquemment!

    Voilà le problème:
    Je créé n label à partir de n lignes retournées d'une requête select d'une bdd sqlite.
    Les labels sont créés, je leur donne un id mais je ne peux pas y faire référence ailleurs. Je pensais que c'était une histoire de portée. Mais même avec des fonctions publiques ça ne marche pas. Peut être que la fonction qui créé les label devraient les retourner?
    Voici le code correspondant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public function clicBesoin():void
    {
    sqls4.text = "select id_besoinF,lbl_besoinF,Unite,AffichF,coordX,coordY,largeur from besoinF order by AffichF DESC;";
    sqls4.execute();
    sqls4.addEventListener(SQLEvent.RESULT, CreerChps);
    resultats_ration();
    }
    public function CreerChps(e:SQLEvent):void
    {
    var donnees:Array = sqls4.getResult().data;
    dapa = new ArrayCollection(donnees);
    var lab:Label;
    for (var j:uint=0; j<donnees.length;j++){
            lab=new Label();
    	lab.id="valBesoinF"+donnees[j]["id_besoinF"];//valBesoinF1 par exemple
    	lab.name="valBesoinF"+donnees[j]["id_besoinF"];
    	lab.text="0";
    	lab.move(donnees[j]["coordX"]+donnees[j]["largeur"]+10,donnees[j]["coordY"]);
    	resRationT.addElement(lab);
    }
    }
    public function resultats_ration():void
    {
    valBesoinF1.text="12314";//Ne fonctionne pas
    }

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Ton premier problème ici c'est que tes labels n'existent pas encore lorsque tu y fais référence dans ta fonction resultats_ration.
    Flex fonctionne en asynchrone sur les appels distants.

    Déjà, j'ai jamais fonctionné comme tu le fais mais je suis surpris de l'ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sqls4.execute();
    sqls4.addEventListener(SQLEvent.RESULT, CreerChps);
    J'aurais inversé ces deux lignes mais là je ne suis pas certain du tout de la chose. Ça revient peut-être au même.

    Bref, toujours est-il que tu demandes au serveur BD d’exécuter une requête et tu dis à ton client flex que sur le retour tu veux qu'il exécute la fonction CreerChps. Et dans la foulée, tu appelles resultats_ration.
    Mais à ce moment précis, le serveur n'a pas encore répondu (il est en train d’exécuter la requête) et CreerChps n'a pas encore été appelée, donc tes labels pas encore créés.

    Si ce que je te dis n'est pas clair, met un debug('coucou') au début de CreerChps et un debug('toto') au début de resultats_ration. Tu verras que toto arrive avant coucou.

    Appelle donc ta méthode resultats_ration à la fin de ta méthode CreerChps et ça marchera mieux.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 248
    Par défaut
    Merci Clemoigno de ta réponse.
    J'ai donc fait appel à resultats_ration à la fin de CreerChps mais ça ne change rien.
    Pire, avec un bouton j'appelle la fonction Btn1 et il ne reconnait toujours pas valBesoinF1 (Pourtant lab.Id créé valBesoin1 c'est étrange)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function Btn1(e:MouseEvent):void{
    	var valBesoinF1:Label;
    	valBesoinF1.text="tttt";
    }
    Le label valBesoinF1 est sur la scène mais n'est plus utilisable dès lors qu'on sort de la méthode CreerChps.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 248
    Par défaut
    J'ai l'impression que c'est dans l'utilisation de addElement que le soucis vient.
    Mais addChild ne fonctionne pas... En fait non, car le composant Label est un composant spark et est donc associé à la méthode addElement...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Hello

    J'ai donc fait appel à resultats_ration à la fin de CreerChps mais ça ne change rien.
    Si si, ça change quelquechose je t'assure. Avant tu n'avais aucune chance que cela marche car ton composant label n'existait pas au moment ou tu voulais y accéder. Maintenant, il existe bien, c'est juste que t'y accèdes pas correctement :-)


    Essaie un truc genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (resRationT.getElementByName('valBesoinF1') as Label).text = 'toto'

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 248
    Par défaut
    Bien vu clemoigno!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public function clicRation():void
    {
    	sqls4.sqlConnection = sqlc;
    	sqls4.text = "select id_besoinF,lbl_besoinF,Unite,AffichF,coordX,coordY,largeur from besoinF order by AffichF DESC;";
    	sqls4.addEventListener(SQLEvent.RESULT, CreerChps);
    	sqls4.execute();		
    }
    public function CreerChps(e:SQLEvent):void
    {
    	var donnees:Array = sqls4.getResult().data;
    	dapa = new ArrayCollection(donnees);
    	var lab:Label;
     
    	for (var j:uint=0; j<donnees.length;j++){	
    		lab=new Label();
    		lab.id="valBesoinF"+donnees[j]["id_besoinF"];
    		lab.name="valBesoinF"+donnees[j]["id_besoinF"];
    		lab.text="0";
    		lab.move(donnees[j]["coordX"]+donnees[j]["largeur"]+10,donnees[j]["coordY"]);
    		lab.height=21;
    		lab.width=42;
    		if(donnees[j]["id_besoinF"]==1){lab.text="124"; resRationT.addElementAt(lab,5)/*Alert.show("champ= "+lab.id)*/}
    		else{
    		resRationT.addElement(lab);
    		}
    	}
    	resultats_ration();
    }
    public function resultats_ration():void
    {
    	(resRationT.getElementAt(5) as Label).text = 'toto'
    }
    Par contre getElementByName ne fonctionne pas. J'utilise donc getElementAt mais il n'y a pas moyen de récuypérer l'élément par son nom? (ainsi je pourrais faire : getElementByName("valBesoinF3+donnees[j]["id_besoinF"]) dans une boucle)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Lien site dans label - Link dynamique
    Par Brialex dans le forum VB.NET
    Réponses: 3
    Dernier message: 04/04/2015, 22h12
  2. Réponses: 1
    Dernier message: 28/05/2011, 11h39
  3. Supprimer tous les labels créés dynamiquement d'un control
    Par MiXinG dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/05/2009, 11h48
  4. supprimer des labels crées dynamiquement
    Par patbou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2007, 13h53
  5. [FLASH 8] Changer label bouton dynamiquement dans une boucle
    Par Malau dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 03/05/2006, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo