Les Allergies
Alimentaires
Posez votre question Signaler

Retirer des élément d'une listbox en VB ?? [Résolu]

nico8002 24Messages postés 9 juin 2010Date d'inscription 16 janvier 2011Dernière intervention - Dernière réponse le 17 juin 2010 à 13:42
Bonjour à tous ,
j'ai un Select qui m'affiche les resultats dans une listbox et je voudrais pouvoir retirer des éléments dans cette listbox .
je voudrais cliquer sur un nom dans ma liste et cliquer sur un bouton "retirer"
Avez-vous quelques idées de code ??
Merci d'avance .
Lire la suite 

Retirer des élément d'une listbox en VB »

71 réponses
Réponse
+0
moins plus
Sur ton bouton retirer, tu peux faire une suppression de l'enregistrement dans ta base avec une requête sql du genre:
"DELETE * FROM TaTable WHERE TaTable.Nom = ""& Me.ListBox.Text &"";"
Ajouter un commentaire
Réponse
+0
moins plus
ah mais en faite je veux pas le retirer de ma base , je voudrais juste l'enlever de ma liste .
t'aurai une idée comment faire ?
parce que je commence le vb , jsuis un peu dans le flou :s
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
il faut que tu récupères l'index des éléments à enlever (index i par exemple).

Ensuite, tu peux faire :
ListBox1.Items.RemoveAt(i)
nico8002- 15 juin 2010 à 10:25
jai fais sa

Dim ItemObject(9) As System.Object
Dim i As Integer
For i = 0 To 9
ItemObject(i) = "Item" & i
Next i
LB_ListeMachines.Items.RemoveAt(i)

mais quand je lance mon application et que je clique sur le bouton sa me surligne en jaune la ligne que j'ai souligné
Ajouter un commentaire
Réponse
+0
moins plus
Je ne suis pas très imaginatif ce matin mais tu pourrais créer un seconde table semblable à la première dans laquelle tu ferais une copie de ta table source. Pour retirer des éléments, tu le supprimerais comme je te l'ai proposé plus haut.
C'est une solution très sale, je te l'accorde et tu dois certainement pour voir trouver mieux.
Tu peux aussi envisager de stocker ceux que tu souhaite garder dans une autre table, au lieu de supprimer ce que tu ne veux plus, mais ce n'est guère mieux.
Quel usage envisage tu de ta liste épurée au juste ?
Ajouter un commentaire
Réponse
+0
moins plus
bha enfaite j'ai une base de données avec une liste de machine
et je vais devoir envoyer un fichier sur certaines machines
donc j'affiche les machines (présent dans ma base) dans une listbox
et je voudrais en retirer dans la listbox pour envoyer mon fichier que a celle que je souhaite envoyer .
Ajouter un commentaire
Réponse
+0
moins plus
Chrij , jai fais sa

Dim ItemObject(9) As System.Object
Dim i As Integer
For i = 0 To 9
ItemObject(i) = "Item" & i
Next i
LB_ListeMachines.Items.RemoveAt(i)

mais quand je lance mon application et que je clique sur le bouton sa me surligne en jaune la ligne que j'ai souligné
nico8002- 15 juin 2010 à 11:01
Dim ObjetDataSet As DataSet
ObjetDataSet.Clear()
For Each item In LB_ListeMachines.SelectedItems
LB_ListeMachines.Items.Remove(item)
Next

j'ai fais sa mais sa souligne en vert ce que j'ai souligné et sa me dit :
"La variable 'ObjetDataSet' est utilisée avant qu'une valeur ne lui ait été assignée. Une exception de référence null peut se produire au moment de l'exécution."
chrij- 15 juin 2010 à 11:22
Normal pour l'erreur.
Il ne faut pas que tu créer l'objet dataset.
Tu dois avoir quelque part un "Data qq chose" qui est ouvert (c'est ce que disait l'erreur "Impossible de modifier la collection d'éléments lorsque la propriété DataSource est définie" Tu dois le fermer pour modifier les éléments de la Listbox.
nico8002- 15 juin 2010 à 11:30
oh yeah sa efface ;)
mais sa efface toute ma listbox :/
jvoudrais que sa en efface que celui que je selectionne
Ajouter un commentaire
Réponse
+0
moins plus
en faite sa marche pas ,

Dim DT As New DataTable
DT.Clear()
For Each item In LB_ListeMachines.SelectedItems
LB_ListeMachines.Items.Remove(item)
Next

voila j'ai fait ce que tu ma dis pour mon datasource mais sa me surligne tjrs la meme chose et me dit la meme erreur
Ajouter un commentaire
Réponse
+0
moins plus
Je viens de faire un test rapide qui a l'air de fonctionner :
Dim liste As ListBox.SelectedIndexCollection
        liste = ListBox1.SelectedIndices
        For Each item In liste
            ListBox1.Items.RemoveAt(item)
        Next


Normalement ça n'efface que les items sélectionnés
nico8002- 15 juin 2010 à 13:58
oui je vais essayer
sur visual basic 2008
nico8002- 15 juin 2010 à 14:02
je viens de faire ce que tu ma dis
donc je l'ai mi à la fin de ma fonction qui m'affiche tout dans ma liste

et quand je lance l'appli et que je clique sur le bouton , il me surligne la ligne LB_ListeMachines.SetSelected(i, False)
et voila ce qui me dit :
"InvalidArgument=La valeur '5' n'est pas valide pour 'index'. Nom du paramètre : index"
chrij- 15 juin 2010 à 14:12
Met ... To ListBox1.Items.Count - 1
(la liste est numérotée à partir de 0)
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
Apparemment tu est en VB.Net, je ne connaît pas la syntaxe mais en VB6 j'écrirais...
    For i = ListBox1.Count - 1 To 0 Step -1
        If ListBox1.Selected(i) Then
            ListBox1.RemoveItem (i)
            i = i - 1
        End If
    Next i

A toi de transcrire en .net
A=
nico8002- 15 juin 2010 à 13:48
ok
jvais essayer de retranscrire tout sa
merci
lermite222- 15 juin 2010 à 13:55
En relisant ton poste principal, tu pourrais directement enlever la ligne dans l'évènement clic de la listBox
    ListBox1.RemoveItem (ListBox1.ListIndex)
Ajouter un commentaire
Réponse
+0
moins plus
Bon, ce qui est bien c'est que l'on bosse avec la même version de vb.
Ce qui est moins c'est que moi je n'ai pas de souci.

Peux-tu me montrer la fonction qui remplie ta listbox ?
nico8002- 15 juin 2010 à 15:51
bha est ce que je dois mettre du code dans la fonction de ma listbox ?
chrij- 15 juin 2010 à 15:58
je suis en train de regarder. Je reviens si je trouve quelque chose
nico8002- 15 juin 2010 à 15:59
oh merci :)
Ajouter un commentaire
Réponse
+0
moins plus
J'ai trouvé un lien qui propose une solution pour remplir une listbox à partir d'une base de donnée.
http://www.vbfrance.com/...

En gros, il faudrait mettre :
TA.Fill(DT)
oleDbConnex.Close()
for i=0 to DT.Rows.Count -1
LB_ListeMachines.Items.Add(DT.Rows(i)("NomColonne").toString)
Next


J'ai pas de base de donnée sous la main pour tester...
nico8002- 16 juin 2010 à 11:18
MsgBox(LB_ListeMachines.Items.Count)
DT.Clear()
MsgBox(LB_ListeMachines.Items.Count)

je les mi dans mon bouton "retirer" avant le DT.clear()
y maffiche bien quil y a 20enregistrements et apres le DT.clear
y me dit 0 donc cest normal quil a pas le temps de supprimer un seul vu qui supprime toute la liste avant :/
nico8002- 16 juin 2010 à 11:19
cest sur que cest le DT.clear() qui est mal placer
chrij- 16 juin 2010 à 14:17
Peux tu tester de supprimer le DT.clear() et tenter de fermer la connexion à la fin du remplissage de la listebox ?
oleDbConnex.Close()
Ajouter un commentaire
Réponse
+0
moins plus
Salut,
j'ai regardé un peu depuis hier.
Le souci, c'est que tu lie ta source de donnée à ta liste : tu ne peux donc pas modifier ta liste directement (risque de modifier la bdd) et tu ne peux pas non plus fermer ta connexion (cela vide la liste).

Il faut trouver un moyen de remplir autrement ta listbox pour qu'elle utilise les données sans être lié à la base.
La solution que j'avais mise plus haut est peut être un moyen d'arriver à cela.
chrij- 17 juin 2010 à 11:31
c'est cool !!
Pense à mettre la question en résolu !
nico8002- 17 juin 2010 à 11:41
Voila voila c'est fait ;)
Merci encore =)
nico8002- 17 juin 2010 à 13:42
hey j'aurai juste une question , pour moi savoir si je dois le faire plus tard
si au lieu de retirer simplement de la liste , je veux le selectionner dans la liste et cliquer sur un bouton "supprimer" pour qui me le retire de ma base
cest quoi le code ?
Ajouter un commentaire
Réponse
+0
moins plus
Voila je met le code pour le prochain qui sera dans la meme galere que moi Lol

Le code de la fonction de remplissage de la listbox


Private Sub CKB_ChoixToutesMachines_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
DT.Clear()
Dim oleDbConnex As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\..\BDD.mdb")
Dim oleCmd As New OleDb.OleDbCommand("SELECT NomMachine FROM Machine ORDER BY NomMachine", oleDbConnex)
Try
Dim TA As New OleDb.OleDbDataAdapter(oleCmd)
LB_ListeMachines.Items.Clear()
TA.Fill(DT)
oleDbConnex.Close()
For i = 0 To DT.Rows.Count - 1
LB_ListeMachines.Items.Add(DT.Rows(i)("NomMachine").ToString)
Next
Catch ex As Exception
MessageBox.Show("Impossible d'établir la connexion à la base !! " & ex.Message)
End Try
For i = 0 To LB_ListeMachines.Items.Count - 1
LB_ListeMachines.SetSelected(i, False)
Next
End Sub


le code de la fonction pour retirer un element de la listebox

Private Sub B_Retirer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Retirer.Click
DT.Clear()
For i = LB_ListeMachines.Items.Count - 1 To 0 Step -1
If LB_ListeMachines.GetSelected(i) Then
LB_ListeMachines.Items.RemoveAt(i)
i = i - 1
End If
Next i
End Sub
Ajouter un commentaire
Ce document intitulé « Retirer des élément d'une listbox en VB ?? » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?