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 :

Gérer les éléments dans des listBoxs [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Par défaut Gérer les éléments dans des listBoxs
    Bonjour,
    Voici le fonctionnement actuel de mon programme j'ai une listBox qui est alimenté par une base de données, l'utilisateur sélectionne ensuite les éléments qu'il l'intéresse dans la liste déroulante et clique sur un bouton d'ajout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Protected Sub AbPlus_Click(ByVal sender As Object, ByVal e As EventArgs)
            For Each l_Item As ListItem In ListBox1.Items
                If (l_Item.Selected) Then
                    ListBox2.Items.Add(l_Item)
                End If
            Next
        End Sub
    Les éléments qu'il a sélectionnés se retrouve alors dans la listbox 2 mais ils sont toujours présent dans la listBox1.
    Ma question est comment faire pour que les éléments qu'il sélectionnes passe de la ListBox1 a la ListBox2 tous en étant supprimer de la ListBox1 afin qu'il n'y est pas de doublon .

    J'espéré avoir étais clair avec mes histoires de ListBox1 et ListBox 2 ^^

  2. #2
    Membre éclairé Avatar de Khalyss
    Homme Profil pro
    Développeur .NET et Web
    Inscrit en
    Septembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET et Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2010
    Messages : 47
    Par défaut
    C'est un projet ASP.NET et VB ?
    Sinon tu peut essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Protected Sub AbPlus_Click(ByVal sender As Object, ByVal e As EventArgs)
            For Each l_Item As ListItem In ListBox1.Items
                If (l_Item.Selected) Then
                    ListBox2.Items.Add(l_Item)
                    ListBox1.Items.Remove(l_Item)
                End If
            Next
    End Sub

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Par défaut
    merci de ta réponse et oui c est bien un projet avec une partie client en aspx et une partie serveur en aspx.vb.
    Pour le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.Remove(l_Item)
    j'avais déjà test et a l'écriture il n'y a pas d'erreur en revanche a la génération lors du clic sur le bouton en question une erreur intervient :
    "Une exception de type 'System.InvalidOperationException' s'est produite dans mscorlib.dll mais n'a pas été gérée dans le code utilisateur

    Informations supplémentaires*: La collection a été modifiée*; l'opération d'énumération peut ne pas s'exécuter." et sa ne marche pas une idée ?

  4. #4
    Membre éclairé Avatar de Khalyss
    Homme Profil pro
    Développeur .NET et Web
    Inscrit en
    Septembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET et Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2010
    Messages : 47
    Par défaut
    C'est surement dû au binding de tes données sur ta ListBox. Je ferai quelque test cet après midi. Et j'éditerai mon message

    Cordialement,
    Jln.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Par défaut
    Super merci
    j'ai fait quelque progrès grâce a l'élément "Contains" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Protected Sub AbPlus_Click(ByVal sender As Object, ByVal e As EventArgs)
            For Each l_Item As ListItem In ListBox1.Items
                If (l_Item.Selected) Then
                    If ListBox2.Items.Contains(l_Item) = False Then
                        ListBox2.Items.Add(l_Item)
                    End If
                End If
            Next
        End Sub
    Ainsi si l'élément est déjà présent dans ListBox2 il ne peut pas être ajouté une deuxième fois. Donc pas de doublon par contre je n'arrive toujours pas supprimer l'élément sélectionné dans la ListBox1.

  6. #6
    Membre éclairé Avatar de Khalyss
    Homme Profil pro
    Développeur .NET et Web
    Inscrit en
    Septembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET et Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2010
    Messages : 47
    Par défaut
    Bon j'ai résolu ton soucis

    Premièrement, shame on me, l'erreur n'était pas du tout dû au binding mais au fait qu'il est impossible de modifier une collection (ListBox.items) que tu es en train d'énumérer (For Each ...). Logique

    Je suis donc passé par une boucle For, et c'est là qu'on comprend l'erreur que je viens de citer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Btn1.Click
            Dim i As Integer
            Dim count = ListBox1.Items.Count - 1
            For i = 0 To count
                If i <= ListBox1.Items.Count - 1 Then
                    If ListBox1.Items(i).Selected = True Then
                        ListBox2.Items.Add(ListBox1.Items(i))
                        ListBox1.Items.Remove(ListBox1.Items(i))
                        i -= 1
                    End If
                End If
            Next
        End Sub
    En effet, une fois que tu viens de supprimer ton item, le suivant prend l'index du précédant et ainsi de suite en cascade.

    Comme la condition To count n'est pas réévalué, on se tape ensuite une belle exception index out of range. J'ai donc rajouté une condition pour vérifier si i n'était pas supérieur au count de la collection.

    J'ai testé ça a marché chez moi. N'oublie pas de mettre l'attribut SelectionMode de tes ListeBox à Multiple.

    Si c'est OK, n'oublie pas de mettre le sujet en résolu.

    Cordialment,
    Jln.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Par défaut
    Je fais peut etre une betise mais voici le code que j'ai avec mes noms pour les listBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Protected Sub AbPlus_Click(ByVal sender As Object, ByVal e As EventArgs)
     
            Dim i As Integer
            Dim count = ab.Items.Count - 1
            For i = 0 To count
                If i <= ab.Items.Count - 1 Then
                    If ab.Items(i).Selected = True Then
                        Box1.Items.Add(ab.Items(i))
                        ab.Items.Remove(ab.Items(i))
                        i -= 1
                    End If
                End If
            Next
        End Sub
    et sur mon poste le premier count a une erreur :Toutes les déclarations de variable de Option Strict On requièrent une clause 'As'.
    et le deuxième en a également une :Option Strict On interdit les conversions de 'Object' en 'Integer'.

    De plus je vois que tu as ajouter un :"Handles Btn1.Click" sur la deuxieme ligne a quoi correspond t'il ?

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Par défaut
    Je suis vraiment désolé j'ai poster plus vite que je n'ai réfléchie, j'étais suspendu à tes lèvres et j'avais coupé mon cerveau alors après modif voici le code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Protected Sub AbPlus_Click(ByVal sender As Object, ByVal e As EventArgs)
     
            Dim i As Integer
            Dim count As Integer = ab.Items.Count - 1
            For i = 0 To CInt(count)
                If i <= ab.Items.Count - 1 Then
                    If ab.Items(i).Selected = True Then
                        Box1.Items.Add(ab.Items(i))
                        ab.Items.Remove(ab.Items(i))
                        i -= 1
                    End If
                End If
            Next
        End Sub
    Merci beaucoup Jln.

  9. #9
    Membre éclairé Avatar de Khalyss
    Homme Profil pro
    Développeur .NET et Web
    Inscrit en
    Septembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET et Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2010
    Messages : 47
    Par défaut
    Oui pour tes erreurs c'est que tu doit avoir mis l'option Strict sur On ce qui t'empêche la liaison tardive d'un type sur une variable.

    Pas de soucis, n'oublie pas de mettre en résolue.

    EDIT : Le Handles est une clause qui permet de spécifié que la procédure que l'on déclare gère l’évènement qui suit. Ici Btn1.click.

    D'ailleurs je ne comprend pas bien comment ta procédure se déclenche si tu n'as pas de clause Handles ??

    Cordialement,
    JLN.

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Par défaut
    je pense qu'elle se déclenche dans ma partie aspx quand l'utilisateur clique sur le bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Button ID="AbPlus" runat="server" Text="+ abscisse" OnClick="AbPlus_Click" />
    qui appelle coté serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Protected Sub AbPlus_Click(ByVal sender As Object, ByVal e As EventArgs)
    etc...
    End Sub

  11. #11
    Membre éclairé Avatar de Khalyss
    Homme Profil pro
    Développeur .NET et Web
    Inscrit en
    Septembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET et Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2010
    Messages : 47
    Par défaut
    Oui bien vu c'est ça. Je ne suis pas un spécialiste de l'ASP.NET, je l'ai trifouillé un peu mais je suis plus client lourd (Winform et WPF). La magie du framework fait que le code Behind est sensiblement le même

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/07/2011, 17h54
  2. Réponses: 3
    Dernier message: 24/10/2010, 12h03
  3. Réponses: 3
    Dernier message: 25/01/2009, 17h32
  4. Réponses: 5
    Dernier message: 15/04/2008, 11h20
  5. Réponses: 1
    Dernier message: 22/01/2008, 16h58

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