List-Eintrag löschen

  • Hallo zusammen.

    Das Script:

    Spoiler anzeigen
    [autoit]


    #include<GUIConstantsEx.au3>
    #include<File.au3>

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

    $Form1 = GUICreate("Form1", 558, 275, 193, 125)
    $Input1 = GUICtrlCreateInput("", 40, 24, 153, 21)
    $List1 = GUICtrlCreateList("", 256, 24, 289, 123)
    $Button1 = GUICtrlCreateButton("Hinzufügen", 40, 56, 155, 25, 0)
    $Button2 = GUICtrlCreateButton("Alles Löschen", 40, 120, 155, 25, 0)
    $Button3 = GUICtrlCreateButton("Markierten Eintrag löschen", 40, 88, 155, 25, 0)
    $Button4 = GUICtrlCreateButton("Liste kommagetrennt speichern in Datei", 40, 160, 507, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $Button1 ; Eintrag zufügen
    GUICtrlSetData($List1, GUICtrlRead($Input1) & "|")

    Case $Button2 ; Alles löschen
    GUICtrlSetData($List1, "")

    Case $Button3 ; Markierten Eintrag löschen

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

    Case $Button4 ; Liste in eine Textdatei speichern

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

    EndSwitch
    WEnd

    [/autoit]

    Bei $Button3 möchte ich, das der markierte Eintrag gelöscht wird und bei $Button4, das die Liste in eine Datei gespeichert wird. Ist die Liste vor dem drücken auf den Button vorhanden, dann leeren oder löschen und neu erstellen.

    Ich komme da einfach nicht weiter. Wäre für Hilfe sehr dankbar.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (20. September 2009 um 09:42)

  • Moin,
    ... also wie das mit den Standard Befehlen/Funktionen geht weiss ich leider auch nicht,
    aber mit der "<GUILISTbox.au3" . ^^

    [autoit]


    #include<GUILISTbox.au3>
    _GUICtrlListBox_DeleteString($List1,_GUICtrlListBox_GetCurSel($List1)); Liest das aktuelle Item aus, und löscht es

    [/autoit]

    Das Dateischreiben hab ich jetzt so gelöst:

    [autoit]

    For $i=0 To _GUICtrlListBox_GetCount($List1)-1;schleife die alle Items beinhaltet
    FileWrite("Dateiname.txt",_GUICtrlListBox_GetText($List1,$i)&@CRLF); schreibt jede zeile ein Item der Liste
    Next

    [/autoit]

    Edit: Die Dateischreib-Methode ist ungetestet sollte aber funktionieren :)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

    2 Mal editiert, zuletzt von XovoxKingdom (20. September 2009 um 08:39)

    • Offizieller Beitrag

    Hier, ich denk das sollte alles erfüllen, was du wolltest.

    Spoiler anzeigen
    [autoit]

    #include <GuiListBox.au3>
    #include <GUIConstantsEx.au3>
    $Form1 = GUICreate("Form1", 558, 275, 193, 125)
    $Input1 = GUICtrlCreateInput("", 40, 24, 153, 21)
    $List1 = GUICtrlCreateList("", 256, 24, 289, 123)
    $hList = GUICtrlGetHandle($List1)
    $Button1 = GUICtrlCreateButton("Hinzufügen", 40, 56, 155, 25, 0)
    $Button2 = GUICtrlCreateButton("Alles Löschen", 40, 120, 155, 25, 0)
    $Button3 = GUICtrlCreateButton("Markierten Eintrag löschen", 40, 88, 155, 25, 0)
    $Button4 = GUICtrlCreateButton("Liste kommagetrennt speichern in Datei", 40, 160, 507, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1 ; Eintrag zufügen
    GUICtrlSetData($List1, GUICtrlRead($Input1) & "|")

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

    Case $Button2 ; Alles löschen
    GUICtrlSetData($List1, "")

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

    Case $Button3 ; Markierten Eintrag löschen
    $iSel = _GUICtrlListBox_GetCurSel($hList)
    _GUICtrlListBox_DeleteString($hList, $iSel)

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

    Case $Button4 ; Liste in eine Textdatei speichern
    $sTmp = ""
    $iCount = _GUICtrlListBox_GetCount($hList) - 1
    For $i = 0 To $iCount
    $sTmp &= _GUICtrlListBox_GetText($hList, $i) & ","; Einträge mit nachfolgenden , an den String anhängen
    Next
    $sTmp = StringTrimRight($sTmp, 1); letztes Komma entfernen
    $Datei = FileOpen(@ScriptDir & "\test.txt", 2); Datei im Überschreibmodus öffen
    FileWrite($Datei, $sTmp)
    FileClose($Datei)
    EndSwitch
    WEnd

    [/autoit]

    Edit: Habe das schreiben der Datei, nach deinem Button "Liste kommagetrennt speichern in Datei" erledigt.

    Edit2: Zu Spät, war wohl zu lange Kaffee trinken ;(

  • Eine Frage noch.

    Kann ich am Anfang auch gleich Daten aus der vorlage.txt ins $List1 einlesen?
    Dann braucht man die später nicht immer neu eingeben.

    LG und BEIDEN HERZlichen DANK !!!!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    SO?

    Spoiler anzeigen
    [autoit]

    #include <GuiListBox.au3>
    #include <GUIConstantsEx.au3>
    $Form1 = GUICreate("Form1", 558, 275, 193, 125)
    $Input1 = GUICtrlCreateInput("", 40, 24, 153, 21)
    $List1 = GUICtrlCreateList("", 256, 24, 289, 123)
    $hList = GUICtrlGetHandle($List1)
    $Button1 = GUICtrlCreateButton("Hinzufügen", 40, 56, 155, 25, 0)
    $Button2 = GUICtrlCreateButton("Alles Löschen", 40, 120, 155, 25, 0)
    $Button3 = GUICtrlCreateButton("Markierten Eintrag löschen", 40, 88, 155, 25, 0)
    $Button4 = GUICtrlCreateButton("Liste kommagetrennt speichern in Datei", 40, 160, 507, 25, 0)
    GUISetState(@SW_SHOW)
    If FileExists(@ScriptDir & "\Test.txt") Then
    $sTmp = FileRead(@ScriptDir & "\Test.txt")
    $aTmp = StringSplit($sTmp, ",")
    If Not @error Then
    For $i = 1 To $aTmp[0]
    _GUICtrlListBox_AddString($hList, $aTmp[$i])
    Next
    EndIf
    EndIf
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1 ; Eintrag zufügen
    GUICtrlSetData($List1, GUICtrlRead($Input1) & "|")

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

    Case $Button2 ; Alles löschen
    GUICtrlSetData($List1, "")

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

    Case $Button3 ; Markierten Eintrag löschen
    $iSel = _GUICtrlListBox_GetCurSel($hList)
    _GUICtrlListBox_DeleteString($hList, $iSel)

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

    Case $Button4 ; Liste in eine Textdatei speichern
    $sTmp = ""
    $iCount = _GUICtrlListBox_GetCount($hList) - 1
    For $i = 0 To $iCount
    $sTmp &= _GUICtrlListBox_GetText($hList, $i) & ","; Einträge mit nachfolgenden , an den String anhängen
    Next
    $sTmp = StringTrimRight($sTmp, 1); letztes Komma entfernen
    $Datei = FileOpen(@ScriptDir & "\test.txt", 2); Datei im Überschreibmodus öffen
    FileWrite($Datei, $sTmp)
    FileClose($Datei)
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Raupi, für's einlesen kann man auch einen Einzeiler nehmen (SCNR):

    [autoit]

    If FileExists(@ScriptDir & '\Test.txt') Then GUICtrlSetData($List1, StringReplace(FileRead($sFilename), ',', '|'))

    [/autoit]


    und beim speichern solltest Du prüfen, ob überhaupt Einträge in der Liste sind ($iCount = positiv?).

    • Offizieller Beitrag

    Raupi, für's einlesen kann man auch einen Einzeiler nehmen (SCNR):

    [autoit]

    If FileExists(@ScriptDir & '\Test.txt') Then GUICtrlSetData($List1, StringReplace(FileRead($sFilename), ',', '|'))

    [/autoit]


    und beim speichern solltest Du prüfen, ob überhaupt Einträge in der Liste sind ($iCount = positiv?).

    Mit dem Einzeiler hast du Recht. ;) Die Abfrage ob Einträge vorhanden sind, braucht man aber nicht unbedingt.
    Wenn kein Eintrag vorhanden ist, wird halt eine datei ohne Inhalt geschrieben.Es wäre sogar fatal, wenn man die bestehende Liste löschen will.

    Mein Code mit dem EInzeiler von Oscar:

    Spoiler anzeigen
    [autoit]

    #include <GuiListBox.au3>
    #include <GUIConstantsEx.au3>
    $Form1 = GUICreate("Form1", 558, 275, 193, 125)
    $Input1 = GUICtrlCreateInput("", 40, 24, 153, 21)
    $List1 = GUICtrlCreateList("", 256, 24, 289, 123)
    $hList = GUICtrlGetHandle($List1)
    $Button1 = GUICtrlCreateButton("Hinzufügen", 40, 56, 155, 25, 0)
    $Button2 = GUICtrlCreateButton("Alles Löschen", 40, 120, 155, 25, 0)
    $Button3 = GUICtrlCreateButton("Markierten Eintrag löschen", 40, 88, 155, 25, 0)
    $Button4 = GUICtrlCreateButton("Liste kommagetrennt speichern in Datei", 40, 160, 507, 25, 0)
    GUISetState(@SW_SHOW)
    If FileExists(@ScriptDir & '\Test.txt') Then GUICtrlSetData($List1, StringReplace(FileRead(@ScriptDir & '\Test.txt'), ',', '|'))
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1 ; Eintrag zufügen
    GUICtrlSetData($List1, GUICtrlRead($Input1) & "|")

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

    Case $Button2 ; Alles löschen
    GUICtrlSetData($List1, "")

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

    Case $Button3 ; Markierten Eintrag löschen
    $iSel = _GUICtrlListBox_GetCurSel($hList)
    _GUICtrlListBox_DeleteString($hList, $iSel)

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

    Case $Button4 ; Liste in eine Textdatei speichern
    $sTmp = ""
    $iCount = _GUICtrlListBox_GetCount($hList) - 1
    For $i = 0 To $iCount
    $sTmp &= _GUICtrlListBox_GetText($hList, $i) & ","; Einträge mit nachfolgenden , an den String anhängen
    Next
    $sTmp = StringTrimRight($sTmp, 1); letztes Komma entfernen
    $Datei = FileOpen(@ScriptDir & "\test.txt", 2); Datei im Überschreibmodus öffen
    MsgBox(0,0,$sTmp)
    FileWrite($Datei, $sTmp)
    FileClose($Datei)
    EndSwitch
    WEnd

    [/autoit]