Larmada
Messages postés16Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention12 juin 2012
-
11 juin 2012 à 17:17
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
12 juin 2012 à 07:09
Salut à tous,
Voici mon code pour supprimer les subitems en double...il fonctionnait bien hier mais aujourd'hui sans avir fais de modifs, plus rien...
Private Sub SearchButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchButton1.Click
Dim tmp As String
Dim k, g As Integer
k = 0
Do While k <= ListView4.Items.Count - 1
tmp = ListView4.Items(k).SubItems(1).Text
For g = k + 1 To ListView4.Items.Count - 1
If tmp.Equals(ListView4.Items(g).SubItems(1).Text) Then
Dim fi As New FileInfo(ListView4.Items(g).Text)
Dim intResponse As Integer
intResponse = MsgBox(ListView4.Items(g).Text & vbNewLine & "Do you want to delete the duplicate found in the folder?", _
vbYesNo + vbQuestion, _
"Duplicate found!")
If intResponse = vbYes Then
fi.Delete()
ListView4.Items.RemoveAt(g)
CountLabel1.Text = ListView4.Items.Count.ToString & " Files!"
Else
Exit Sub
End If
k -= 1
Exit For
Else
MsgBox("No duplicate found in the folder", _
vbOKOnly + vbInformation, _
"No Duplicate Found!")
Exit Do
End If
Next
k += 1
Loop
End Sub
J'ai juste une colonne adresse du fichier, et une autre pour le nom du fichier (subitem)
Larmada
Messages postés16Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention12 juin 2012 11 juin 2012 à 19:26
J'ai trouvé ceci mais pour les items...et non subitems comme je veux...
Public Sub RemoveDuplicates(ByVal lstView As ListView)
Try
Dim itemI, itemJ As ListViewItem
lstView.BeginUpdate()
For i As Integer = lstView.Items.Count - 1 To 0 Step -1
itemI = lstView.Items(i)
For z As Integer = i + 1 To lstView.Items.Count - 1 Step 1
itemJ = lstView.Items(z)
If itemI.Text = itemJ.Text Then
lstView.Items.Remove(itemJ)
Exit For
End If
Next z
Next (i)
lstView.EndUpdate()
Catch ex As Exception
End Try
End Sub
Private Sub SearchButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchButton1.Click
Donc, j'ai pris la peine d'analyser tes boucles imbriquées.
Admettons que les 2 premiers subitems soient différents, on arrive au else en question où il y a cette msgbox (style vb6 et obsolète mais bon). Juste après, tu sors de la boucle do/loop. Résultat: 1 seul test à été effectué.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 12 juin 2012 à 07:09
Bonjour, Larmada :
Résolu!
Un simple "If" mal placé
mais j'ai lu (ton 1er message) :
il fonctionnait bien hier mais aujourd'hui [quote]sans avir fais de modifs
, plus rien... /quote et ai "survolé" le code (de ton 1er message également)
Et je crois que l'explication (fonctionnait ===>> ne fonctionne plus ===>> maintenant résolu (if mal placé) ) n'est pas la bonne. Je crois également que le problème reviendra. Je crois qu'il ne se révèle que dans "certains cas"
Change donc ton fusil d'épaule et fait ta boucle "à l'envers" (de bas en hait et non de haut en bas).
Car dans l'état actuel de ton code, chaque ligne :
ListView4.Items.RemoveAt(g)
vient "bousculer" les choses (puisque la numerotation des rangs s'en trouve modifiée).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ