Supprimer des éléments sélectionnés dans une ListBox

MaitreNicodeme Messages postés 3 Date d'inscription vendredi 21 novembre 2003 Statut Membre Dernière intervention 27 novembre 2003 - 27 nov. 2003 à 12:04
MaitreNicodeme Messages postés 3 Date d'inscription vendredi 21 novembre 2003 Statut Membre Dernière intervention 27 novembre 2003 - 27 nov. 2003 à 15:28
Bonjour à tous :) !

J'utilise 2 ListBox.

La première, que l'on nommera List1, contient des paramètres sélectionnables par l'utilisateur.

La deuxième, que l'on nommera List2, contient les paramètres sélectionnés par l'utilisateur.

Si l'utilisateur sélectionne plusieurs paramètres dans List1 et qu'il clique sur le bouton pour valider, ces éléments de List1 sont ajoutés dans List2.
Dim objItem as Object

For Each objItem In lstCatRemuOut.SelectedItems
lstCatRemuIn.Items.Add(objItem.ToString())
lstCatRemuOut.Items.Remove(objItem)
Next

Mon problème survient lorsque je veux les supprimer de List1. En effet, j'ai le message d'erreur suivant (tout à fait logique si on y pense) :

Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans system.windows.forms.dll

Informations supplémentaires : La liste à laquelle cet énumérateur est lié a été modifiée. Un énumérateur ne peut être utilisé que si la liste ne change pas.

Ma question est donc:
Comment supprimer plusieurs éléments sélectionnés d'une ListBox ?

Merci d'avance pour vos réponses et vos conseils,

Nicodème.

2 réponses

pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
27 nov. 2003 à 14:09
voila 2 façons de procéder :
Evidement il faut mettre la propriété multiselect de listbox1

Private Sub Command1_Click()
'Exemple en stockant les index a suppr
'dans un tableau dynamique

Dim I As Integer
Dim X As Integer 'variable pour la redim du tableau
Dim Tableau() 'declaration tableau dynamique

For I = 0 To List1.ListCount - 1 'parcourt de la list1
If List1.Selected(I) = True Then 'si selectionné alors
ReDim Preserve Tableau(X) 'redim du tableau
Tableau(X) = I 'stocke l'index selectionner dans le tableau
X = X + 1 'ajoute 1 a la variable en vu de la prochaine entrée
End If
Next I

'Supression des index
For I = 0 To UBound(Tableau)
List1.RemoveItem Tableau(I) - I
Next I
End Sub

Private Sub Command2_Click()
'Exemple en stockant les index a conserver dans un tableau dynamique

Dim I As Integer
Dim X As Integer 'variable pour la redim du tableau
Dim Tableau() 'declaration tableau dynamique
For I = 0 To List1.ListCount - 1
If List1.Selected(I) = False Then
ReDim Preserve Tableau(X) 'redim du tableau
Tableau(X) = List1.List(I) 'stocke Le texte selectionner dans le tableau
X = X + 1 'ajoute 1 a la variable en vu de la prochaine entrée
End If
Next I

'reaffichage des élément de list1 non selectionné
List1.Clear 'efface list1
For I = 0 To UBound(Tableau)
List1.AddItem Tableau(I)
Next I
End Sub
0
MaitreNicodeme Messages postés 3 Date d'inscription vendredi 21 novembre 2003 Statut Membre Dernière intervention 27 novembre 2003
27 nov. 2003 à 15:28
Tout d'abord, merci de ta réponse.

J'ai oublié de souligner que je développais en VB.Net. Est-ce qu'une méthode ne permet d'aller plus vite ?

Nicodème.
0
Rejoignez-nous