Markierte (Checkbox) ListViewItems löschen

  • Hallo zusammen,

    habe nach langer Zeit mal wieder ein kleines Problem, das ich selber nicht lösen kann. Ich möchte gerne alle Items, die ich markiert habe löschen. Nur löscht er mir immer das zweite Item. Ich weiß auch warum. Nach langem suchen und denken bin ich drauf gekommen, dass wenn ein Item gelöscht wird, sich das darunter befindliche Item nach oben verschiebt und dadurch ein neuen Index bekommt.
    Ich weiß jetzt nur nicht wie ich das umsetzen soll. Ich hoff das mir einer helfen kann. Danke.

    Hier mal ein Testscript:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIListView.au3>

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

    GUICreate("Test", 500, 300)

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

    $ItemMenu = GUICtrlCreateMenu("Datei")
    $SubItemMenu = GUICtrlCreateMenuitem("Markierten Einträge löschen", $ItemMenu)

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

    $ListView = GUICtrlCreateListView("Titel|Text", 0, 0, 400, 200, -1, $LVS_EX_GRIDLINES+$LVS_EX_FULLROWSELECT+$LVS_EX_CHECKBOXES)
    GUICtrlCreateListViewItem("Test|Test", $ListView)
    GUICtrlCreateListViewItem("Test2|Test2", $ListView)
    GUICtrlCreateListViewItem("Test3|Test3", $ListView)
    GUICtrlCreateListViewItem("Test4|Test4", $ListView)

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

    GUISetState()

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

    While 1
    $Msg = GUIGetMsg()

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

    Switch $Msg
    Case -3
    Exit
    Case $SubItemMenu
    _Loeschen()
    EndSwitch
    WEnd

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

    Func _Loeschen()
    $MELCount = _GUICtrlListView_GetItemCount($ListView) - 1

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

    For $i = 0 To $MELCount
    $MELGetText = _GUICtrlListView_GetItemTextArray($ListView, $i)
    $MELGetChecked = _GUICtrlListView_GetItemChecked($ListView, $i)

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

    If $MELGetChecked = True Then _GUICtrlListView_DeleteItem($ListView, $i)
    Sleep(200)
    Next
    EndFunc

    [/autoit]

    MfG

    MehmeX

    Einmal editiert, zuletzt von MehmeX (20. Oktober 2009 um 21:45)

  • Du musst von hinten anfangen die Einträge zu löschen. Löschst du z.B. den 2. Eintrag, bekommt das 3. Element ja Position 2. ;).

    Spoiler anzeigen
    [autoit]

    Func _Loeschen()
    $MELCount = _GUICtrlListView_GetItemCount($ListView) - 1
    For $i = $MELCount To 0 Step -1
    $MELGetText = _GUICtrlListView_GetItemTextArray($ListView, $i)
    $MELGetChecked = _GUICtrlListView_GetItemChecked($ListView, $i)
    If $MELGetChecked = True Then _GUICtrlListView_DeleteItem($ListView, $i)
    Sleep(200)
    Next
    EndFunc

    [/autoit]
  • Zitat

    Löschst du z.B. den 2. Eintrag, bekommt das 3. Element ja Position 2. ;).

    Genau, das habe ich danach auch bemerkt.

    Zitat

    Du musst von hinten anfangen die Einträge zu löschen.

    Stimmt, damit die Einträge nicht verrutschen. :whistling:
    Danke!!! :thumbup: