ListView "auslesen" klappt nicht (Anfänger)

  • Guten Abend liebe AutoIt-Profis,
    ich bin absoluter AutoIt-Anfänger und habe folgendes Problem:
    Ich habe soeben meine allererste „User-Form“ gebastelt, mit der ich Textdateien aus dem Ordner "C:\_Test" auslesen (und später löschen) möchte. Also habe ich mir mit der AutoIt-Hilfe aus mehreren Beispielen mein eigenes Script zusammengeschustert. Bin auch soweit stolz, denn das Auslesen von Dateiname und Erstellungszeit klappt für meine beschränkten Kenntnisse prima … :thumbup:

    Aber: Wenn ich den Button „die markierte Datei löschen“ drücke kommt nicht wie erwartet der Dateiname, sondern immer die ListView-Auswahl 0, egal ob und welchen Eintrag ich in der Liste ausgewählt habe – wo liegt mein Fehler? ?(

    Ideal wäre, wenn ich hier den Dateinamen herausbekommen könnte (wie in Spalte 1 des ListView) – die Löschfunktion schaffe ich dann alleine …

    Vielen Dank im Voraus für Eure Hilfe!!! Mit freundlichen Grüßen Michael

    [spoiler][#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiButton.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #Include <Array.au3>


    Global $RohPfad, $Anzahl, $uchPfad

    Opt('MustDeclareVars', 1)

    $Debug_LV = False


    $RohPfad = "C:\_Test\"

    $Anzahl = _FileListToArray($RohPfad,"*.txt",1)
    $Anzahl = $Anzahl[0]
    $uchPfad = FileFindFirstFile($RohPfad & "*.txt")


    _Loeschen_aus_Liste()

    Func _Loeschen_aus_Liste()

    Local $ListView, $Button, $Name[$Anzahl][2], $Zaehler, $Zeit[6], $TT_MM_JJJJ, $td_Min, $Datei, $msg


    ; Create GUI
    GUICreate(" Datei zum Löschen auswählen", 500, 400)

    $Button = GUICtrlCreateButton("die markierte Datei löschen", 150, 220, 200, 30)

    $ListView = GUICtrlCreateListView("", 3, 20, 494, 175)
    _GUICtrlListView_AddColumn($ListView, "Name der Datei", 300)
    _GUICtrlListView_AddColumn($ListView, "Erstellungsdatum", 190)


    For $Zaehler = 0 To UBound($Name) - 1

    $Name[$Zaehler][0] = FileFindNextFile($uchPfad)
    $Datei = $RohPfad & $Name[$Zaehler][0]
    $Zeit = FileGetTime($Datei, 1)

    $TT_MM_JJJJ = $Zeit[2] & "." & $Zeit[1] & "." & $Zeit[0]
    $td_Min = $Zeit[3] & ":" & $Zeit[4] & " Uhr"

    $Name[$Zaehler][1] = $TT_MM_JJJJ & " " & $td_Min

    Next

    _GUICtrlListView_AddArray($ListView, $Name)


    GUISetState()


    Do
    $msg = GUIGetMsg()

    If $msg = $Button Then
    MsgBox(0, "Name der Datei", GUICtrlRead($ListView,1))
    EndIf

    Until $msg = $GUI_EVENT_CLOSE


    FileClose($uchPfad)


    EndFunc]

    Einmal editiert, zuletzt von kilo (6. April 2011 um 22:21)

  • Hallo kilo,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die deutsche Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu deiner Frage: das kommt daher dass du di LV-Items mit einer Funktion aus der UDf erstellt hast. GuiCtrlRead funktioniert aber nur mit den nativen (fest eingebauten) Funktionen von AutoIt. Und selbst dann hättest du nur den Index erhalten. Warum du auch mit _FileListToArray und FileFindFirstFile / FileFindNextFile den Ordner 2 mal durchsuchst verstehe ich nicht. Mein Lösungsvorschlag wäre:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiButton.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $sPath = @ScriptDir & "\" ;Pfad anpassen
    Global $aFiles[1]

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $aFiles = _FileListToArray($sPath, "*.txt", 1)

    [/autoit] [autoit][/autoit] [autoit]

    _Loeschen_aus_Liste()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Loeschen_aus_Liste()

    [/autoit] [autoit][/autoit] [autoit]

    Local $idLV_Files, $idBtn_Delete, $dtTime, $msg, $aInfo

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Create GUI
    GUICreate(" Datei zum Löschen auswählen", 500, 400)

    [/autoit] [autoit][/autoit] [autoit]

    $idBtn_Delete = GUICtrlCreateButton("die markierte Datei löschen", 150, 220, 200, 30)

    [/autoit] [autoit][/autoit] [autoit]

    $idLV_Files = GUICtrlCreateListView("Name der Datei|Erstellungsdatum", 3, 20, 494, 175)
    _GUICtrlListView_SetColumnWidth($idLV_Files, 0, 300)
    _GUICtrlListView_SetColumnWidth($idLV_Files, 1, 300)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $aFiles[0]
    $dtTime = FileGetTime($sPath & $aFiles[$i], 0)
    GUICtrlCreateListViewItem($aFiles[$i] & "|" & $dtTime[2] & "." & $dtTime[1] & "." & $dtTime[0] & " " & $dtTime[3] & ":" & $dtTime[4] & " Uhr", $idLV_Files)
    Next
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $idBtn_Delete Then
    $aInfo = StringSplit(GUICtrlRead(GUICtrlRead($idLV_Files, 1)),"|") ;über GuiCtrlRead
    ;$aInfo = _GUICtrlListView_GetItemTextArray($idLV_Files) ;oder fertige Funktion
    if MsgBox(36, "Datei: " & $aInfo[1], "erstellt am " & $aInfo[2] &@CRLF & "wirklich löschen?") = 6 Then
    ConsoleWrite("Datei " & $aInfo[1] & " würde gelöscht!" & @CRLF)
    Else
    ConsoleWrite("Datei " & $aInfo[1] & " würde nicht gelöscht!" & @CRLF)
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Until $msg = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Loeschen_aus_Liste

    [/autoit]

    mfg autoBert

  • Genial !!! :thumbup:

    Ich habe schon ein wenig mit AutoIt "rumgebastelt", bin eigentlich für Installationsroutinen zufällig darauf gestoßen. Aber das war mein erster Versuch einer "User-Form" (habe relative gute VBA -Kenntnisse) aber mit AutoIt keinerlei Erfahrungen. Mir war z.B. gar nicht beweußt, dass der Ordner 2x durchsucht wird. Ich habe mir aus mehreren Funktionen, die ich in der Hilfe gefunden einfach etwas "zusammengedängelt" - nunja, jeder fängt mal irgendwie an ...

    Das (neueste und auch die älteren) Bücher von peethebee sind mir bekannt, ganz große Klasse! Da habe ich aber nichts zu ListView gefunden und die dt. Hilfe zu AutoIt ist mir oftmals etwas zu "löchrig".

    Nochmal ganz herzlichen Dank an alle die überhaupt drauf geschaut haben und natürlich insbesondere an autobert für die geniale Lösung!

    MfG Michael

  • die dt. Hilfe zu AutoIt ist mir oftmals etwas zu "löchrig".

    da muss ich Tweaky und den Doc in Schutz nehmen: Die deutsche Hilfe ist eine 1 zu 1 Übersetzung des Originals und annähernd fehlerfrei übersetzt. Die englische Hilfe ist auch um Welten besser als ich in meinem bisherigen Programmiererleben jemals gesehen habe.

    mfg autoBert