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

VB.NET Discussion :

boucle sur un objet


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Novembre 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 337
    Par défaut boucle sur un objet
    bonjour a tous, je suis en train de developpez une petite application en vb.net, et je suis confronté a un probleme depuis quelques jours. voila, j'ai une collection (nommé intelligement collection ici), et des objets (ligne)
    Je souhaite entrer les lignes dans ma collection a l'aide d'une boucle for. ces lignes depandent d'un interger (i), selon i, la ligne change.
    La connection, me permet de me connecter a un fichier, et le chemin est le chemin de ce fichier.
    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
     
    test = New Ligne
    test.connection(chemin)
     
    'instanciation de la collection
    tableau = New CollectionDeLigne
     
    'recuperation du nombre de lignes contenu dans le tableau
    compte = test.nbre_de_ligne()
     
        For i = 2 To compte
     
            'je rempli mon objet avec les donnée du tableau (je ne le fait pas dans le constructeur, sinon j'ai une erreur)
            test.remplissage(i)
     
            'j'ajoute la ligne a ma collection
            tableau.add(test)
     
            'je vide mon objet
            test = Nothing
     
        Next
     
    'j'affiche les données de ma collection
    tableau.affichage()
     
    'je ferme ma connection
    test.fermeture_connection()
    Si quelqu'un peu me donner une piste de reflection, j'en serait plus que ravi.merci beaucoup

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 337
    Par défaut
    (une fausse manip....j'ai pas eu le temps de poser mon probleme dans le post precedent... )

    le probleme est que dans ma collection, il n'y a pas plusieur objet différents, mais plusieurs objet qui ont les meme attributs.....ils sont tous identiques.

    merci

  3. #3
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    J'ai rien compris

  4. #4
    Membre Expert Avatar de LaChips
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 109
    Par défaut
    Bonjour,
    En fait tu as un problème avec la "philosophie objet" dans ce cas là.
    Je m'explique :
    Tu as une instance d'un objet (que tu as appelé test) tu l'initialise au début de ton code.
    Ensuite dans chaque tour de ta boucle tu utilises la méthode remplissage() de cet objet. (celle-ci doit surement changer les attributs de cet objet)
    ensuite tu ajoutes ton objet à la collection.
    Or ton erreur viens de là : au tour suivant, tu remodifis les attributs de la même instance de l'objet test, et tu l'ajoutes à ta collection.
    Ta collection contiens donc 2 fois la même instance de ton objet test.
    Quand tu modifis les attributs d'un objets test tu les modifis tous dans ta collection. Car la collection est qu'une collection de "pointeurs".

    Il faut donc que tu rajoutes les lignes suivante :

    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
     
    Ligne.connection(chemin) ' Il faut que ca soit une méthode partagée (shared)
     
    'instanciation de la collection
    tableau = New CollectionDeLigne
     
    'recuperation du nombre de lignes contenu dans le tableau
    compte = Ligne.nbre_de_ligne() ' Pareil : shared
     
        For i = 2 To compte
     
            'je rempli mon objet avec les donnée du tableau (je ne le fait pas dans le constructeur, sinon j'ai une erreur)
            test = New Ligne()
            test.remplissage(i)
     
            'j'ajoute la ligne a ma collection
            tableau.add(test)
        Next
     
    'j'affiche les données de ma collection
    tableau.affichage()
     
    'je ferme ma connection
    test.fermeture_connection()
    PS: j'avais pas vu la ligne : test = nothing
    mais c'est quand même normal que ca ne fonctionne pas car tu ne créés pas de nouvelle instance de ton objet.

  5. #5
    Membre expérimenté
    Inscrit en
    Novembre 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 337
    Par défaut
    ben voila ce que me met mon ami (plus pour longtemp) visual studio

    Une exception non gérée du type 'System.NullReferenceException' s'est produite dans test.exe

    Informations supplémentaires*: La référence d'objet n'est pas définie à une instance d'un objet.

    bidou, ce que je veut, c'est remplir mon objet avec des valeurs différentes a chaque passage de la boucle. En bref, j'ai un tableau excel, je m'y connect, et je souhaite récuperer toutes les lignes de ce tableau dans une collection afin de les traiter.

    Mais je n'arrive pas a changer les valeurs de l'objet, resultat, ma collection est pleine d'objet qui ont les memes valeurs

  6. #6
    Membre Expert Avatar de LaChips
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 109
    Par défaut
    Essaye de reprendre ton premier code et de retirer la ligne test = nothing

  7. #7
    Membre expérimenté
    Inscrit en
    Novembre 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 337
    Par défaut
    Ben mon ex copain visual me met le meme message... il est pas joueur du tout ce petit. Mais tu pourrait me dire comment tu verrait la chose car la je patauge...
    de plus, mes test indique que :
    quand je rentre la premiere valeur, ca marche, ensuite, quand je met la deuxieme, ca ecrase la premiere avec les valeurs de la deuxieme, puis ajoute la deuxieme a la bonne place, et ainsi de suite, resultat, il ne me reste que les valeurs de la derniere ligne quand mon traitement se termine.
    Je me demandait si ca ne venait pas du fait que j'utilisait l'objet collection, et que je faisait un
    collection.add(ligne)
    ???
    ne vaudrait t'il pas mieux utiliser un array list, ou une linked list (a moin que ce ne soit en JAVA..... )

  8. #8
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Dans le code du bouton valider, met un Try catch et affiche tout le détail de l'exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Try
    ' Tout le code de ton bouton valider ici.
    catch ex as Exception
        MessageBox.Show(ex.ToString())
    end try
    ça va déjà te donner la ligne où l'erreur se produit.

  9. #9
    Membre expérimenté
    Inscrit en
    Novembre 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 337
    Par défaut
    bon c'est bon, en frappant fort sur ma tour, le programme a redemarre, il a pas marché mieux, mais ca ma calmé, et j'ai finalement trouvé une maniere de faire mon traitement, bon, ca ne marche pas exactement comme je le voulai, mais ca marche...
    (apres quand meme 5 jour de reflexion, j'adore le developpement pour ces petits moment de plaisir apres une longue agonie..... )

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

Discussions similaires

  1. [XL-2010] Fair une boucle sur des objets Ranges
    Par Escorpion dans le forum Excel
    Réponses: 6
    Dernier message: 18/03/2015, 18h14
  2. Boucle sur les objets de la classe
    Par mactwist69 dans le forum VB.NET
    Réponses: 6
    Dernier message: 05/06/2014, 15h27
  3. Boucle sur des objets d'une feuille
    Par BERRACHED SAID dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 09/07/2013, 09h54
  4. [AC-2002] Boucle sur les objets chart dans Userform
    Par Kriss63 dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/02/2010, 09h56
  5. Réponses: 10
    Dernier message: 16/04/2009, 10h39

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