tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
3909
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    olek olek ist offline Mitglied Bronze
    Registriert seit
    Feb 2005
    Beiträge
    36
    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
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.002
    Der Startindex bei den Items des ListView-Control liegt bei 1 und nicht bei Null.
    Probier es mal so:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    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
    Geändert von Shakie (19.02.05 um 10:15 Uhr)
     
    hihi = -h²

  3. #3
    olek olek ist offline Mitglied Bronze
    Registriert seit
    Feb 2005
    Beiträge
    36
    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
     

  4. #4
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.002
    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.
     
    hihi = -h²

  5. #5
    Fingers Fingers ist offline Mitglied
    Registriert seit
    Dec 2004
    Beiträge
    17
    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
     

  6. #6
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.002
    @Fingers: Mit [Code] und [/Code ] (ohne Leerzeichen), kannst du auch alles hier nachlesen: http://www.tutorials.de/misc.php?do=bbcode
     
    hihi = -h²

  7. #7
    Avatar von Filone
    Filone Filone ist offline Mitglied Gold
    Registriert seit
    Aug 2004
    Ort
    Saarbrücken
    Beiträge
    232
    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 :
    1
    
    For i = 1 To frmSonstWas.lvSonstWas.ListItems.Count

    einen geänderten Wert hat. Sonst kommt es zu Fehlermeldungen (berechtigterweise).
     
    __________________
    Look busy. Jesus is coming.

Ähnliche Themen

  1. ANT: Doppelte Einträge in Datei löschen?
    Von rantanohneplan im Forum Java
    Antworten: 1
    Letzter Beitrag: 01.07.08, 13:53
  2. doppelte Einträge löschen
    Von piti66 im Forum PHP
    Antworten: 3
    Letzter Beitrag: 03.01.06, 15:29
  3. doppelte Einträge löschen
    Von piti66 im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 29.12.05, 11:43
  4. doppelte Einträge löschen
    Von piti66 im Forum PHP
    Antworten: 1
    Letzter Beitrag: 29.12.05, 11:18
  5. doppelte einträge in db löschen
    Von starter/or_not im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 30.12.01, 14:29