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 :

Effacer éléments listbox


Sujet :

VB.NET

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Effacer éléments listbox
    Bonsoir tout le monde,

    Je vous expose mon problème. Je réalise un petit programme dans le cadre d'un projet ( niveau débutant ), et j'en suis à la fin.

    Dans mon programme il y a deux listebox qui se remplissent manuellement et de facon proportionnelle. Si je veux rentrer une valeur dans la première listebox, je dois rentrer obligatoirement une valeur dans la seconde.

    Mon problème réside dans le fait que je n'arrive pas a supprimer comme je le souhaite. Je vous explique :

    - lorsque je sélectionne une valeur dans la première listebox et que je l'efface à l'aide d'un bouton que j'ai fait, alors automatiquement il efface la valeur correspondante dans la seconde. ( cette partie j'y suis arrivé ). L'inverse est possible.

    Mais je n'arrive pas à faire en sorte que lorsque je selectionne une valeur dans la lb1 et la valeur correspondante dans la lb2 alors je peux effacer aussi, en revanche si je selectionne une valeur dans la lb1 et une valeur qui ne correspond pas dans la lb2 alors impossible et apparition d'un message d'erreur.

    Je ne sais pas si j'ai été clair, si vous ne comprenez pas, je reste à disposition pour répondre. En tout cas je vous remercie de votre attention.

    Edit
    je vous mets la partie de code que j'ai pour le moment pour cette partie

    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
     Private Sub effacerBoutonOK()
            Dim valeur1 As Integer
            Dim valeur2 As Integer
            Dim i As Byte
            Dim tour As Byte
            Dim nbreTours1 As Byte
            Dim nbreTours2 As Byte
     
            valeur1 = lstNotes.SelectedItem
            valeur2 = lstCoeff.SelectedItem
            nbreTours1 = lstNotes.Items.Count
            nbreTours2 = lstCoeff.Items.Count
            For tour = 1 To nbreTours1 And nbreTours2
                For i = 0 To lstNotes.Items.Count - 1 Or lstCoeff.Items.Count - 1
                    If valeur1 = lstNotes.Items.Item(i) Or valeur2 = lstCoeff.Items.Item(i) Then
                        lstNotes.Items.RemoveAt(i)
                        lstCoeff.Items.RemoveAt(i)
                        Exit For
                    End If
                Next i
            Next tour

    Malheureusement je viens de m'apercevoir qu'il y a un gros problème. Effectivement j'ai une listebox pour mes notes, une autre pour mes coefficients, mais lorsque j'ai une note identique à mon coefficient plusieurs fois ( exemple 4 notes ayant pour valeur 3 en coeff et 3 en notes ), et bien si je veux supprimer une de ces lignes, le bouton va m'effacer les 3 autres notes et coeff car les valeurs sont identiques. Je suis complètement foutu

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    une autre voie :
    récupérer l'index de l'item sélectionné, et effacer son correspondant.
    Dans le case, on envisage tous les cas de figure, donc à compléter au besoin.
    A voir ce bout de code (pour du simple select) :
    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
            Dim idx1 As Int32 = -1
            Dim idx2 As Int32 = -1
     
            idx1 = ListBox1.SelectedIndex
            idx2 = ListBox2.SelectedIndex
     
            Select Case True
                Case idx1 = -1 And idx2 = -1
                    Exit Select
                Case idx1 > -1 And idx2 = -1
                    ListBox1.Items.RemoveAt(idx1)
                    ListBox2.Items.RemoveAt(idx1)
                Case idx1 = -1 And idx2 > -1
                    ListBox1.Items.RemoveAt(idx2)
                    ListBox2.Items.RemoveAt(idx2)
                Case idx1 = idx2
                    ListBox1.Items.RemoveAt(idx1)
                    ListBox2.Items.RemoveAt(idx1)
                Case idx1 > -1 And idx2 > -1
                    ListBox1.Items.RemoveAt(idx1)
                    ListBox2.Items.RemoveAt(idx1)
                    ListBox1.Items.RemoveAt(idx2 - 1)
                    ListBox2.Items.RemoveAt(idx2 - 1)
            End Select

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour,

    je pense que tu devrais revoir la logique de ton programme pour éviter ton problème.
    Peut être que tu pourrais ne pas t'occuper des valeurs mes seulement des index, ainsi quand tu supprimes l'index 1 dans la première liste, l'index 1 se supprime dans la seconde.
    De même, pour éviter d'avoir à afficher un message d'erreur, je pense qu'il serait plus agréable de faire en sorte que quand tu sélectionnes un index dans une liste, le même est sélectionné dans la seconde automatiquement.
    Le Porc est un loup pour le Porc.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    J'ai reçu une très grosse aide sur un autre forum qui m'a donc permis de terminer mon programme parfaitement, car c'était le seul problème que j'avais à ma connaissance.
    Pour information, je voulais utiliser les index, mais étant un débutant dans le domaine de la programmation et du VB.net, j' ai confondu les items et les index, et lorsque j'essayé avec index, je tombais constamment sur le problème de la valeur "-1". Bien entendu, je n'avais aucune idée de comment résoudre celà.

    En tout cas, je vous remercie de votre aide, je vous poste le code qui a résolu mon problème ( similaire à celui proposé par chrismonoye; mais sans passer par select case ) dans le cas où un jour il peut aider quelqu'un comme moi

    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
    ' variables to hold listbox selected indexes
    Dim lb1 As Integer = ListBox1.SelectedIndex
    Dim lb2 As Integer = ListBox2.SelectedIndex
    Dim removeIndex As Integer = -1
    ' make sure at least one listbox has a selected item 
    If lb1 = -1 And lb2 = -1 Then
        MessageBox.Show("Please select a mark and/or a coefficient.")
        ' if each list has a selected item but indexes do not match then show message
    ElseIf lb1 > -1 And lb2 > -1 AndAlso lb1 <> lb2 Then
        MessageBox.Show("mark and coefficient mismatch.")
        ' set index for removal
    ElseIf lb1 > -1 Then
        removeIndex = lb1
    Else
        removeIndex = lb2
    End If
    ' ask if ok to remove
    If removeIndex > -1 Then
        If MessageBox.Show("OK to delete?", "Delete Items", _
              MessageBoxButtons.YesNo, MessageBoxIcon.Question) _
                    = Windows.Forms.DialogResult.Yes Then
            ' remove items
            ListBox1.Items.RemoveAt(removeIndex)
            ListBox2.Items.RemoveAt(removeIndex)
        End If
    End If
    Merci a Edgemeal pour ce code, et merci à vous

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Ce code est fonctionnel, mais est-ce vraiment pratique ?
    Ne serait-t-il pas plus logique/agréable de sélectionner automatiquement le coefficient qui correspond lorsque l'on change de note ?
    Le Porc est un loup pour le Porc.

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    En gros, tu veux dire qu'en sélectionnant une note, alors automatiquement le coefficient correspondant se sélectionne sans l'intervention de l'utilisateur ?
    Pour être franc, si c'est ce que tu veux dire, et bien oui, se serait une bonne idée, mais je ne savais pas que c'était possible

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    C'est ce que je veux dire en effet.
    Il faut intecepter l'évenement selectedindexchanged et dans ce cas tu sélectionne dans ta deuxième liste le même index que dans la première.
    Le Porc est un loup pour le Porc.

Discussions similaires

  1. binding : Effacer contenu listbox
    Par toss.net dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 24/09/2011, 16h07
  2. Réponses: 1
    Dernier message: 25/11/2010, 10h02
  3. effacer mémoire listbox
    Par lelou54 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/09/2009, 21h45
  4. [VB6] Effacer une listbox lors d'un clic.
    Par Chocapic dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 02/06/2006, 11h55
  5. Ajouter des éléments à ListBox
    Par priest69 dans le forum Access
    Réponses: 5
    Dernier message: 20/09/2005, 14h05

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