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 :

Remplir une listebox a partir d'une collection sans répétition


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut Remplir une listebox a partir d'une collection sans répétition
    Bonjour, avant tout, sachez que je suis un débutant en Visual basic,
    Alors voila mon probleme, je souhaiterais savoir comment mettre les données stockées dans une collection dans une listebox.
    J'ai deux formulaires, l'un ou je saisies des informations qui seront stockées dans des collections, et l'autre ou je ou je consulte les données saisies, le probleme et que, lorsque je clique sur valider (un bouton que j'ai créer sur le formulaire de saisi), je stocke les données des textbox dans une collection, dans le deuxieme formulaire, des le chargement, il recupere les données et les affiche dans la listebox (j'ai utiliser ce code ListBox.Items.Add(...)) jusque la tout va bien, mais si je me comme valeur par exemple 1 au textbox et que clic sur valider, la listebox affiche 1, cependant, lorsque je remplace 1 par 2 et reclic sur valider, la listebox m'affiche 2
    2 , ainsi de suite 3 3 3

  2. #2
    Membre chevronné Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 339
    Par défaut
    Salut,
    Tu trouveras plus d’informations sur les ListBox sur le web :


    Tu y apprendras notamment comment vider ta ListBox, si tu ne veux pas que les valeurs que tu renseignes ne s'ajoutent aux précédentes.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    Merci de ta réponse :-)
    Je voudrais rajouter que pour faire le lien entre mes deux formulaires (l'un ou je saisie et l'autre avec la listbox ou je rempli) j'utilise un module ou je declare une collection pour que cette collection soit accessible par les 2 formulaires.
    Je vais voir les aides que tu me proposes, je te tiens au courant demain. Merci

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    Non, toujours rien :-( pour être plus précis, le problème est que j'utilise un module ou je déclare une collection, les données que je saisies clavier devront normalement être stockées les unes après les autres: exemple, je saisie "bonjour" puis "aurevoir" la listbox au lieu de m'afficher les deux ne m'affiche que la dernière en 2 fois, de même si je saisi "a" (je clic sur le bouton validez) puis "b" puis "c", la listbox m'affiche c mais en 3 fois.

  5. #5
    Membre chevronné Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 339
    Par défaut
    Citation Envoyé par hyorinmaru23 Voir le message
    Non, toujours rien :-( pour être plus précis, le problème est que j'utilise un module ou je déclare une collection, les données que je saisies clavier devront normalement être stockées les unes après les autres: exemple, je saisie "bonjour" puis "aurevoir" la listbox au lieu de m'afficher les deux ne m'affiche que la dernière en 2 fois, de même si je saisi "a" (je clic sur le bouton validez) puis "b" puis "c", la listbox m'affiche c mais en 3 fois.
    Montre nous ton code qui créé ta collection.
    As-tu vérifié que ta collection contenait les informations correctement ?
    Je pense que tu utilises la même variable et que tu remplaces les données avant de les ajouter du coup tu te retrouves avec la dernière valeurs répétées par le nombre de valeurs.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    Je résume: j'ai 2 formulaires, 2 classes et un module
    Le code de mon module (c'est dedans que j'ai créer mes collections pour que ces dernières puissent être accessibles par mes 2 formulaires)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Module Collections
          Public CollFacture As New Collection
          Public CollClient As New Collection
          Public leClient As New Client
          Public uneFacture As New Facture
          Public lafacture As New Facture
    End Module

    Ensuite, dans le formulaire A ou je recupère les textbox pour les afficher dans la listebox de l'autre formulaire: j'ai créer un bouton validez dont voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub btnValidez_Click(sender As Object, e As EventArgs) Handles btnValidez.Click
            uneFacture.facturer(txtBoxNum.Text, txtBoxDate.Text, txtBoxMontant.Text)
            CollFacture.Add(uneFacture)
    End sub

    Enfin, dans le formulaire B ou a partir d'un bouton, il doit m'afficher les données stockés récuperer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            For Each fact In CollFacture
                ListBox.Items.Add(uneFacture.numFacture)
            Next
    End Sub

    Le problème reste sur le fait que si dans mon txtbox je saisi "a" validez "b" validez "c" validez, ma listbox m'affiche "c 3 fois

  7. #7
    Membre chevronné Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 339
    Par défaut
    Pour le code il faut utiliser les balises prévues à cet effet en cliquant sur le bouton [#].
    Ensuite tes infos ne me sont que très peu utiles car je ne vois pas comment tu crées ta collection et comment tu la partage.

    Je te conseil de faire du débogage en utilisant le mode pas à pas [F8] et de vérifier l'évolution de tes variables et valeurs.

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    J'ai remarqué que le nombre de fois que je clique sur le bouton valider correspond au nombre de fois ou le dernier élement saisi apparaîtra sur la listbox.

    J'ai procédé au débogage pas à pas (f11) mais toujours rien, je ne vois pas à quoi est du le problème :-(

  9. #9
    Membre chevronné Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 339
    Par défaut
    Il va falloir y mettre un peu de volonté
    Vérifie tes valeurs et variables !
    Avec le peut d'informations je ne peux pas t'aider!

  10. #10
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Hello,

    Vu que tu es débutant, je vais commencer par une question. As-tu lu un cours/tuto/livre concernant la programmation orientée objet ?
    Je pose cette question car ton problème est un problème liée à cela.

    L'idée du module, bien que séduisante au premier abord est très mauvaise pour l'usage que tu en fais. Je te conseille de l'abandonner et de créer tes objets directement dans les formulaires (mais il faudrait que les formulaires se transmettent les objets l'un à l'autre).

    Reprenons ton code...

    Module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Module Collections
          Public CollFacture As New Collection
          Public CollClient As New Collection
          Public leClient As New Client
          Public uneFacture As New Facture
          Public lafacture As New Facture
    End Module
    Formulaire A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub btnValidez_Click(sender As Object, e As EventArgs) Handles btnValidez.Click
                 uneFacture.facturer(txtBoxNum.Text, txtBoxDate.Text, txtBoxMontant.Text)
                 CollFacture.Add(uneFacture)
    End sub
    Formulaire B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
                 For Each fact In CollFacture
                         ListBox.Items.Add(uneFacture.numFacture)
                 Next
    End Sub
    Dans le module, tu déclares CollFacture et CollClient comme étant de nouvelles collections, leClient comme étant un nouveau client, uneFacture et lafacture comme étant de nouvelles factures.

    Dans ton formulaire A, tu utilises la méthode/fonction nommée "facturer" de la facture qui s'appelle "uneFacture" (celle qui a été crée dans le module) et tu ajoutes ensuite cette facture dans la collection nommée "CollFacture". Donc, puisque tu ne crées jamais une nouvelle facture dans ton formulaire A, ce que tu fais c'est que, à chaque fois, tu modifies la facture qui est crée dans le module et tu l'ajoutes une fois de plus à la collection. Alors forcément, dans ta listbox, tu retrouves avec plusieurs fois la même chose. Ce qui est bien ce que tu as dit de faire (c'est très con un ordi, ça ne fait que ce qu'on lui demande ^^).

    Je te laisse médité là-dessus

  11. #11
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    Merci beaucoup :') je vais voir ce que je peux faire avec
    Effectivement je suis débutant en VB et j'ai du mal a appréhender le concept de la programmation orienté objet.
    Une petite précision s'il te plaît, d'après ce que j'ai compris, il est donc possible de lier les deux formulaires (pour recupérer les entrées du form A vers B) sans utiliser un module? (en les stockant bien sur dans des collections pour retrouver a quel client appartient tel facture (form B))
    Si c'est le cas, je voudrais juste savoir comment un formulaire B peut recupérer il récupérer les données d'une collection déclaré dans un formulaire A (le lien qui le permet? enfin le code)

  12. #12
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par hyorinmaru23 Voir le message
    Une petite précision s'il te plaît, d'après ce que j'ai compris, il est donc possible de lier les deux formulaires (pour recupérer les entrées du form A vers B) sans utiliser un module? (en les stockant bien sur dans des collections pour retrouver a quel client appartient tel facture (form B))
    Tout à fait !

    Tu peux par exemple faire ceci quelque chose du genre :

    Formulaire A:
    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
    Public Class FormA
        Private _facture As Facture
        Private _factures As List(Of Facture)
     
        Private Sub btnShowFormB_Click(sender As Object, e As EventArgs) Handles btnShowFormB.Click
            Dim frm As New FormB(factures)
            frm.Show 
            'et eventuellement une ligne pour fermer/masqué ce formulaire si nécessaire
        End Sub
     
        Private Sub btnValidation_Click(sender As Object, e As EventArgs) Handles btnValidation.Click
            _facture = New Facture
            _facture.facturer(1, 2, 3) 'remplacer 1, 2 et 3 par les valeurs appropriées
            _factures.Add(_facture)
        End Sub
    End Class
    Formulaire B:
    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
    Public Class FormB
        Private _factures As List(Of Facture)
     
        Public Sub New(factures As List(Of Facture))
            ' This call is required by the designer
            InitializeComponent()
     
            ' Add any initialization after the InitializeComponent() call.
            _factures = factures
            FillListBox()
        End Sub
     
        Private Sub FillListBox
            listbox1.Items.Clear
            For Each fct As Facture In _factures
                listbox1.Items.Add(fct.NumFacture)
            Next
        End Sub
     
    End Class
    Code directement écrit sur le forum et non testé. C'est juste pour illustrer et discuter.

  13. #13
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    Un peu..compliqué mais bon, j'essaierai de comprendre, c'est déjà grand chose ce que tu me donnes là
    dernière question avant de me lancer: est ce que tous les deux sont possibles et permettent la même chose?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private _factures As List(Of Facture) = Private_factures As New Collection(Of Facture)

  14. #14
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Tout à fait.

    C'est juste que, personnellement, je préfère travailler avec des List(Of T) plutôt qu'avec des Collection(Of T). Mais chacun ses goûts ^^.

    Concernant la complexité du code que j'ai fourni, dans quelques temps, cela te paraîtra très basique

    Attention que je n'ai pas tout mis dans le code que j'ai posté. Il manque par exemple l'instanciation de la liste des factures dans le constructeur du formulaire A. Je n'ai mis que ce qui sert à communiquer (avec le remplissage de la listbox en bonus ^^).

  15. #15
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    Merci pour le bonus^^
    Euh... par la liste des factures tu veux dire numFacture, dateFacture...? (je suis désolé si c'est une question idiote )

  16. #16
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je ne suis pas sûr d'avoir compris ta question...

  17. #17
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    Il manque par exemple l'instanciation de la liste des factures dans le constructeur du formulaire A.
    Que veux tu dire par la liste des factures? factures numéro 1, 2, 3?

  18. #18
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je veux dire que dans FormA, je déclare une variable nommée _factures de type List(Of Facture) mais que je ne l'instancie nulle part.

    N.B. : "instancier" = créer une instance = faire un "New"

  19. #19
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    Je vois a peu près ce que ça veut dire :-)
    Bref, merci beaucoup pour le gros tuyau!!! j'essaierai ça demain,

  20. #20
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    NICKELLLLL!!!!!!!!!! jusque là j'ai réussi a bien placé les entrées du clavier sans problèmes dans ma listbox
    Je te remercie Kropernic
    Bon, je passe à la suite de mon projet!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/10/2010, 11h46
  2. Réponses: 2
    Dernier message: 05/03/2010, 14h15
  3. remplir une table a partir d'une combo
    Par stefano dans le forum WinDev
    Réponses: 6
    Dernier message: 18/12/2007, 19h53
  4. Réponses: 11
    Dernier message: 01/05/2007, 23h43
  5. Remplir deux listes select à partir d'une autre
    Par Raduris dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/11/2005, 15h29

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