Doppelte Einträge im ListView löschen

olek

Mitglied
Servus,

Habe ein ListView das mir die installierte Software des PCs ausgibt.
Hin und wieder treten doppelte Einträge auf. Wie kann ich diese löschen bzw. ignorieren in meinem Fall
Ein Ansatz von mir in rot:

Private Sub Form_Load()
Dim SO As SearchOptions
Dim Gefunden() As String
Dim i As Integer
Dim Daten() As String
Dim DisplayName As String
Dim RegKey As String
Dim Folder As String
Dim itemX As ListItem

' Registry in der die deinstallierbare Software aufzufinden ist
RegKey = "Software\Microsoft\Windows\CurrentVersion\Uninstall\"

With ListView1
.ListItems.Clear
.Sorted = True
.SortKey = 0
.SortOrder = lvwAscending

' Alle Einträge im Schlüssel
' Software\Microsoft\Windows\CurrentVersion\Uninstall ermitteln
With SO
.HowToSearch = StringExists
.SearchMainKey = HKEY_LOCAL_MACHINE
.SearchString = "DisplayName"
.StartSearchPath = RegKey
.SearchSubfolders = True
.FindKeys = True
.FindValueNames = True
.FindValues = True
End With

' Suche starten
FindString SO, Gefunden
On Error Resume Next
For i = 0 To UBound(Gefunden)
Daten = Split(Gefunden(i), vbCrLf)

' SubKey definieren
Folder = Mid$(Daten(0), InStrRev(Daten(0), "\") + 1)

DisplayName = Get_ValueString(HKEY_LOCAL_MACHINE, _
RegKey & Folder, "DisplayName")

If DisplayName = "" Then DisplayName = Folder

' ListView1 Daten in ein .txt schreiben
Dim Filenum As Integer
Dim j As Integer

' Doppelte Einträge ignorieren
Dim neuerEintrag As String
Dim doppelt As Boolean
Dim d As Long

neuerEintrag = "Eintrag"
doppelt = False
For d = 0 To ListView1.ListItems.Count
If ListView1.ListItems(d) = neuerEintrag Then doppelt = True
Next d
If doppelt = False Then ListView1.ListItems.Add (neuerEintrag)


' Ausgelesene Daten in ein .txt File schreiben
Filenum = FreeFile
Open "C:\" & GetDomain & "_software.txt" For Output As #Filenum
For j = 0 To ListView1.ListItems.Count
Print #Filenum, ListView1.ListItems(j).Text
Next j
Close #Filenum

Set itemX = .ListItems.Add(, Daten(0), DisplayName)
itemX.SubItems(1) = Daten(2)

Next i
End With
End Sub

DANKE für jede Hilfe!
Gruß alex
 
Der Startindex bei den Items des ListView-Control liegt bei 1 und nicht bei Null.
Probier es mal so:
Code:
Dim strNeuerEintrag As String
strNeuerEintrag = "Mein neuer Eintrag"
Dim blnDoppelt As Boolean
Dim lngZähler As Long
For lngZähler = 1 To ListView1.ListItems.Count
	If Me.ListView1.ListItems(lngZähler).Text = strNeuerEintrag Then
		blnDoppelt = True
		Exit For
	End If
Next
If Not blnDoppelt Then ListView1.ListItems.Add , , strNeuerEintrag
 
Zuletzt bearbeitet:
Habe deinen Code wie oben angegeben eingefügt, jedoch leider keine Wirkung.
Was ist mit "Mein neuer Eintrag gemeint" ... muss ich statt dem etwas einfügen oder wat

DANKE.

cya
 
Du musst logischerweise in die Variable "strNeuerEintrag" den Text des zu erstellenden Eintrags reinschreiben. Ich weiß ja nicht wie der Eintrag bei dir heißt, deswegen habe ich einfach "Mein neuer Eintrag" verwendet.
 
Hallo,

"mein neuer Eintrag" ist der String, den Du neu eintragen willst, also der Softwareeintrag, von dem Du nicht weißt, ob er doppelt ist.

Shakie: Wie kirege ich die tollen Code-Frames in meine Antworten?

Gruß
Fingers
 
Wenn ich mich nicht irre, müsst ihr hierbei bedenken daß nach dem Löschen eines ListItems das Steuerelement modifiziert wurde und damit die Schleife

Code:
For i = 1 To frmSonstWas.lvSonstWas.ListItems.Count

einen geänderten Wert hat. Sonst kommt es zu Fehlermeldungen (berechtigterweise).
 
Zurück