Listview löschen

  • Hi ich habe mal wieder zu Autoit zurückgefunden und sitze nun wieder vor einem scheinbar unlösbaren Problem.

    ich Programmiere gerade einen Kündigungshelfer und Frage mich wie ich eine Listview komplett leeren kann


    [autoit]


    $Listviewall= GUICtrlCreateListView("ID|Gekündigt|Testphase|Erstelldatum",50, 90,700,280)
    ...
    ...
    _GUICtrlListView_DeleteAllItems($Listviewall)

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


    Warum klappt das nicht bzw wie kann ich das Problem lösen?

    Einmal editiert, zuletzt von NonStop (8. Juni 2011 um 02:08)

  • Bei der aktuellen Arbeitsmarktlage willst Du hierbei "Kündigungshelfer" wirklich Hilfe....

    Vermutlich klappt es wenn Du das Handle des Listviews nimmst.

    Gruß N!ce

    [autoit]

    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView_DSN_DB))

    [/autoit]


    das klappt zumindest bei mir.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Da es bei mir klappt liegt es an was anderem. Zu wenig Infos.

    Das klappt bei mir ohne Probleme:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <GuiListView.au3>

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

    $hWnd = GUICreate ("")
    $Listviewall= GUICtrlCreateListView("ID|Gekündigt|Testphase|Erstelldatum",0, 0,300,300)
    For $i = 0 to 100
    GUICtrlCreateListViewItem ($i&"|"&$i&"|"&$i&"|"&$i, $Listviewall)
    Next

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

    $hDeleteButton = GUICtrlCreateButton ("Delete all Items", 0, 300)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $hDeleteButton
    _GUICtrlListView_DeleteAllItems($Listviewall)
    EndSwitch
    WEnd

    [/autoit]
  • Bei mir musste ich über das Handle gehen, aber das lässt sich ja leicht ermitteln.
    Bei mir sind es aber 3 Listviews (mit gleicher Anzahl Spalten etc aber unterschiedlichen Inhalt) die dann zusammengefasst sind. :whistling:

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    • Offizieller Beitrag

    Dietmar.
    Bei _GUICtrlListView_DeleteAllItems sollte man bei einem Standard ListView die CtrlId und nicht das Handle benutzen.
    Die Funktion behandelt das schon selbstständig. Wenn man das Handle zu einem Standard Listview übergibt, wird der verwendete
    Speicher nicht richtig freigegeben. Dazu gibt es auch einen Thread im Englischen Forum.

  • Bei der aktuellen Arbeitsmarktlage willst Du hierbei "Kündigungshelfer" wirklich Hilfe....

    Vermutlich klappt es wenn Du das Handle des Listviews nimmst.

    Gruß N!ce

    [autoit]

    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView_DSN_DB))

    [/autoit]


    das klappt zumindest bei mir.


    Danke mit dem GetHandle hats nun geklappt :)

    Und der Kündigungshelfer ist nicht für Personal, sondern für Anmeldungen bei denen ich keine Frist verpennen will :D

  • Schön das es klappt nun zu der Frage warum.... :D

    Zitat

    Bei _GUICtrlListView_DeleteAllItems sollte man bei einem Standard ListView die CtrlId und nicht das Handle benutzen.
    Die Funktion behandelt das schon selbstständig. Wenn man das Handle zu einem Standard Listview übergibt, wird der verwendete
    Speicher nicht richtig freigegeben. Dazu gibt es auch einen Thread im Englischen Forum.

    Danke für die Info aber warum geht es so was machen wir oder besser er (das Script ist kürzer) falsch das es nicht ohne handle geht.
    Ich habe ja schon mal einen Thread eröffnet gehabt wo es um ein Problem mit der GUI ging,
    Problem enstand nach mehrmaligen Füllen des Listviews. Klingt ja irgendwie nach einem Speicherproblem.

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    Einmal editiert, zuletzt von Dietmar (8. Juni 2011 um 20:24)

    • Offizieller Beitrag

    Dietmar, es kommt auch noch darauf an, wie das Listview befüllt wird.
    BadBunnys Beispiel z.B. funzt, weil die Einträge mit GUICtrlCreateListViewItem befüllt werden.
    Wenn du z.B. _GUICtrlListView_AddItem benutzt, wird ein Eintrag anders eingefügt.
    Um den Speicherhickhack zu umgehen kannst du zu jedem Eintrag den 4. Parameter also $iParam setzen.
    Am besten fortlaufend mit einem Startwert >1000, dann klappt _GUICtrlListView_DeleteAllItems auch mit der ControlId.
    Ob damit auch der Speicherlag 100% ig beseitigt ist kann ich dir nicht genau sagen, das wissen nur die Programmierer von AutoIt.

  • so fütter ist das Listview

    [autoit]


    _GUICtrlListView_AddOrIns_Item($hListView_DSN_DB_Tab1, $DSN_Name & "|" & $cnt_dbserver[$i_cnt] & "|" & $cnt_dbname[$j_cnt][0] & "|" & $cnt_dbname[$j_cnt][1])

    [/autoit]

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o