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 :

Accès à une méthode d'une classe stockée dans un arraycollecton


Sujet :

ActionScript 3

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Points : 55
    Points
    55
    Par défaut Accès à une méthode d'une classe stockée dans un arraycollecton
    Bonjour à tous,

    je développe une appli en flex, et j'ai un soucis en as3.

    J'ai une classe Cours qui extends ArrayCollection, dans laquelle je créer et stocke des instances d'une autre classe CoursItem, qui elle extends Panel, car elle est vouée a l'affichage.

    Après avoir créer mes CoursItem, je les initié (x,y,heigth,width,....), en passant pas le ArrayCollection.

    Voici mon code :

    var tempItem:Object = new CoursItem();

    for(var i:uint=0;i<5;i++){
    tempItem = CC.getItemAt(i,0);
    InitializePanel(tempItem,i);
    }

    //CC c'est une variable Cours (arraycollection) qui contient mes cours item
    Le problème est que dans ma classe coursItem, j'ai une méthode pour ajouter les CoursItem (donc Panel), a ma fenetre, mais je n'arrive pas à faire de tempItem.MaMéthode();

    l'erreur est "MaMéthode n'est pas une fonction."

    Pourriez-vous m'aider, parce que j'ai passé la journée dessus et je craque.

    A la base je code plus en Csharp .net et le flexbuilder, désolé pour le pro fles, mais je trouve ça nulle.
    C'était juste mon avis de débutant.

    merci d'avance

  2. #2
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    Pourquoi Object et pas CoursItem en type ? Oo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tempItem: CoursItem  = new CoursItem();
    Humm sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var tempItem:Object = new CoursItem();
     
    for(var i:uint=0;i<5;i++){
        tempItem = CC.getItemAt(i,0);
        InitializePanel(tempItem,i);
    }
    tu peux remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(var i:uint=0;i<5;i++)
        InitializePanel(CC.getItemAt(i,0),i);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Points : 55
    Points
    55
    Par défaut
    Alors j'ai mis
    var tempItem: Object = new CoursItem();
    par que lorsque que je récupère le contenu de mon arraycollection
    CC.getItemAt(i,0);
    il ne peut faire la conversion entre un type object et un type CoursItem.

    en .Net j'aurais fait un truc de ce style
    (CoursItem)(CC.getItemAt(i,0))
    et il yaurait eu aucun soucis

    voila merci de m'aider, ou de me renvoyer vers des tutos as3 orienté object avec les notions d'héritage et de polymophisme, parce que ceux que j'ai trouvé c'est juste sur la déclaration des classes

    merci d'avance

  4. #4
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    salut,

    sinon tu peux faire ceci en AS3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (CC.getItemAt(i,0) as CoursItem)
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  5. #5
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    ou comme en .net

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (CoursItem)(CC.getItemAt(i,0))
    voir meme pour etre plus lisible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (CoursItem)CC.getItemAt(i,0)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Points : 55
    Points
    55
    Par défaut
    Merci IP-FIXE, mais tu te doute bien que j'ai tester et le cast n'est pas supporté en AS3, ou du moins pas de cette façon.

    Merci pour votre soutient mais le problème persiste, je vais essayer de vous détailler exactement mon pb si ca n'a pas été très clair avant.

    Voici mon code :
    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
     
    //je suis dans ma classe Cours qui extends ArrayCollection
     
                              //j'ai testé les 3 lignes en dessous
                                var tempItem:Object = new CoursItem();
    			  //var tempItem:Object = new Object();
    			  //var tempItem:CoursItem = new CoursItem();
     
                                  //a ce moment this.length renvoi 10
    				if(this.length <5){limite=this.length;} 
    				else{ limite=5;}
     
                                  //test 1
    				for(var i:uint=0;i<limite;i++){
    					tempItem = this.getItemAt(i,0);
     
    					trace(tempItem.getPageName());
     
         //ici l'erreur est getPageName() n'est pas une fonction
        // or getPageName est une méthode de la classe CoursItem qui fonctionne //car je m'en sers auparavant                        
    //et ici tempItem est bien reconnu comme un //CoursItem                                
     
     
                                 //test 2
                                     for(var i:uint=0;i<limite;i++){
    					tempItem = (this.getItemAt(i,0) as CoursItem);
     
    					trace(tempItem.getPageName());
     
    // ici des que je fais le getItemAt, la variable tempItem passe de tempItem Object, à null, et donc tempItem.getPageName() lève une erreur (objet null) normal
    j'espère avoir été assez clair, et que quelqu'un pourra m'expliquer comment stocker des objets d'une classe perso dans un arraycollection (ou autre), et après pouvoir utiliser ces objets et leurs méthodes

    merci d'avance

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Points : 55
    Points
    55
    Par défaut
    J'ai enfin résolu le problème grâce a votre aide

    en effet j'ai utilisé as CoursItem,

    mais j'ai modifié mon code.
    Déjà la classe cours n'étend plus arraycollection, mais je suis passé par un Array déclaré dans ma classe cours, ainsi tout fonctionne bien

    merci encore

  8. #8
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    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
     
    var o:Object;
    var a:Array;
    a = new Array('1','1','1');
    o = a;
     
    //test( (Array)o ); Echec
    test( (Array)(o) ); //Crée un nouveau array 
    test( o as Array);  //Ok
     
     
    function test(array:Array){
    	trace(array.length);
    }
     
    var b:Bitmap;
    o = b;
    test2(Bitmap(o)); //True
    b = new Bitmap();
    o = b;
    test2(Bitmap(o)); //False
    trace(Bitmap(o) === b); //True , verification qu'on crée pas une autre occurence
     
    function test2(bitmap:Bitmap){
    	trace(bitmap==null);
    }
    Donc sa marche mais pas avec les array et en mettant les parenthese entre ce qu'on veut caster

    Sa marche pas avec les array car ils prennent n'importe quoi dans leur constructeur et du coup il invoque le constructeur.

    Je comprend pas trop pourquoi sa marché pas dans ton cas

    J'espere sa t'aide un peu quand meme ^^ !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Points : 55
    Points
    55
    Par défaut
    Yes tinkiet pas IP fixe, j'ai réussi a trouver et le cast avec ( ... as taclasse) est bien plus propre pour moi,

    enfin je reviens vous voir avec un souci, de conception objet ce coup ci.

    J'ai déclaré dans ma classe CoursItem, des méthodes permettant de gérer des effets sur mes instances de la classe CoursItem. Etant donné que je fais sur un click bouton, un effet sur chacune de mes instance de CoursItem, il y a un conflit

    Je m'explique

    j'ai une méthode dans CoursItem, qui initialise un effet, et qui s'execute sur chaque instance de CoursItem. Jusque la pas de souci, sauf que le problème est qu'il doit agir différemment en fonction de l'instance sur lequel j'appel la méthode. Etant donné qu'entre 2 instance de CoursItem, les variables sont les mêmes il y a un conflit. Comment puis faire pour avoir des variables du même nom mais propre à chaque instance.

    Est ce possible ?

    merci d'avance

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Accès à une méthode d'une form depuis une autre autre form
    Par arngrimur dans le forum Windows Forms
    Réponses: 16
    Dernier message: 13/01/2012, 15h45
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Réponses: 0
    Dernier message: 30/09/2009, 18h42
  5. Réponses: 6
    Dernier message: 20/04/2007, 15h24

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