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

Flex Discussion :

AddChild sur une VBox : Référence d'objet nul [Flex3]


Sujet :

Flex

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut AddChild sur une VBox : Référence d'objet nul
    Salut tout le monde,

    Je vais vous décrire directement mon cas:

    - J'ai crée une VBox depuis la page mxml avec l'id "myVBox"
    - Ensuite, depuis la page action script associée à la page mxml précédente, j'ai appelé la méthode addChild sur myVBox comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myVBox.addChild(myDisplayObject);
    A l'éxecution de la page je reçois le message d'erreur:
    TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
    (Sachant, qu'en faisant le debug, je remarque que myVBox est null)

    Savez vous d'où provient le problème? (ou plus précisement pourquoi quand j'appel myVBox, je trouve que c'est null?)

    Je vous remercie d'avance de vos réponses et de vos suggestions.

    Cordialement.

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    bonjour,

    montre nous ton code stp, sans lui on peut pas faire grand chose

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 141
    Points : 118
    Points
    118
    Par défaut
    La réponse la plus plausible c'est que ta vbox n'est pas encore créee lorsque ton code est appelé.
    Mais comme le dit Madfrix, il faudrait avoir un peu plus de ton code pour en être certain.

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

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

    Réponse la plus probable en effet comme le dit vilveq.
    Appelle ton code actionscript dans le creationComplete de ton mxml pour voir. Ça devrait aller mieux.

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    Merci pour vos réponses,

    Je vais vous expliquer comment mon code se déroule:
    Dans mes pages action-script, je crée tout d'abord une instance de mon écran comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private var instanceDeMonEcran : monEcran= new instanceDeMonEcran ();
    Ensuite, comme vous me l'avez conseillé, je fais l'appel à la fonction qui me permet de remplir ma VBox comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    instanceDeMonEcran.addEventListener(FlexEvent.CREATION_COMPLETE, instanceDeMonEcran_CreationCompleteHandler);
    Où j'ai défini le remplissage de ma VBox dans la fonction instanceDeMonEcran_CreationCompleteHandler.

    La remarque la plus importante à l’exécution du code est que l’évènement creationComplete de l'instance de mon écran n'est jamais dispatché , et du coup la fonction instanceDeMonEcran_CreationCompleteHandler n'est jamais appelée. C'est ce qui explique également pourquoi la VBox était nulle lorsque j'essayais de la remplir avant que la création de l'écran ne soit terminée.

    Je vous remercie encore pour vos propositions.

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    hello,

    ta classe monEcran étend quelle classe ? Comment est elle construite ?

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    c'est une composante mxml, voici sa structure générale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
    	creationPolicy="all">
     
            //....
     
    	<mx:VBox id="ma VBox" 
    		height="100%" width="100%" 
    		horizontalAlign="center">
     
    		//....
     
    	</mx:VBox>
    </mx:Canvas>

  8. #8
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Je ne sais pas si tu le fais ou non mais l'événement FlexEvent.CREATION_COMPLETE est distribué quand :

    Distribué lorsque le composant a terminé sa construction, son traitement de propriétés, sa mesure, sa présentation et son tracé.
    ce qui implique donc qu'il faut que tu l'ajoutes auparavant via addChild()

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    En fait, même l'ajout de monEcran se fait dynamiquement dans mon cas.
    Ce que j'essayais de faire est de remplir d'abord la VBox de monEcran et après ajouter monEcran à l'application.
    Je vais corriger ça et je vous tiendrais au courant du résultat

  10. #10
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par dark_geek Voir le message
    Ce que j'essayais de faire est de remplir d'abord la VBox de monEcran et après ajouter monEcran à l'application.
    tout est possible de faire mais dans ce cas de figure, tu ne peux donc pas utiliser l'event FlexEvent.CREATION_COMPLETE pour remplir la VBox avant car elle n'est pas ajoutée à la liste d'affichage et donc ne lance pas cet event

  11. #11
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    le problème est résolu en appliquant le AddChild à monEcran.
    Ce que je veux faire par la suite est d'ajouter un panel à ma VBox, en utilisant le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var instanceDeMonPanel: monPanel= new monPanel();
    monEcran.maVBox.addChild(instanceDeMonPanel);
    Mais rien ne s'affiche dans la VBox, avez vous une idée sur la raison de ça?

    (S'il faut créer un autre sujet pour ce problème d'affichage je le ferai)

  12. #12
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Les instances de tes panels ne correspondent pas (instanceDeMonPanel vs vPanelAppli) mais je pense que c'est une coquille.

    Es tu sur de bien exécuter cette portion de code ? Utilises tu un débugger ?

  13. #13
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    désolé, j'ai fait une faute en copiant le code précédent, je l'ai corrigé.

  14. #14
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 62
    Points
    62
    Par défaut
    La définition absolue de la hauteur et de la largeur de mon composant panel a résolu le problème

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/03/2011, 01h54
  2. Réponses: 2
    Dernier message: 13/01/2010, 19h48
  3. Réponses: 6
    Dernier message: 08/12/2009, 21h12
  4. Réponses: 11
    Dernier message: 05/10/2009, 15h49
  5. "Trigger" sur une insertion : référence au nouveau tuple
    Par samworld dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/06/2007, 22h27

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