GUICtrlCreateListView aktualisieren / oder Inhalt löschen

  • Hallo,

    ich habe eine Listview Objekt in einem Gui. Mit diesen Zeilen lese ich aus eine Datei den Inhalt dafür ein. Beim ersten Durchlauf macht er das auch richtig. Wenn die Zeilen jedoch nochmals ausgeführt werden wird nur noch die erste Spalte des Listviews befüllt.


    Spoiler anzeigen
    [autoit]

    $count = _FileCountLines($file)
    $i2 = 0
    for $i = 1 to $count
    $line = FileReadLine($file, $i)
    $line = StringSplit($line, "|")
    _GUICtrlListView_AddItem($lst_overview, $line[1], $i) ; datum
    _GUICtrlListView_AddSubItem($lst_overview, $i2, $line[2], 1) ; start
    _GUICtrlListView_AddSubItem($lst_overview, $i2, $line[3], 2) ; pause
    _GUICtrlListView_AddSubItem($lst_overview, $i2, $line[4], 3) ; end
    _GUICtrlListView_AddSubItem($lst_overview, $i2, $line[5], 4) ; kommentar
    $i2 = $i2 + 1
    Next

    [/autoit]

    Es würde mir schon helfen, wenn ich wüsste wie ich die Einträge aus dem listview wieder raus bekomme.
    _GUICtrlListView_DeleteAllItems - geht scheibar nur, wenn nicht _AddSubitem verwendet wurde ?!
    _GUICtrlListView_Destroy - blendet die Listview nur aus.
    _GUICtrlListView_DeleteColumn - will ja keine Spalte löschen
    _GUICtrlListView_DeleteItem - habe die Zeilennummer angegeben, aber es wird nichts gelöscht.

    hat jemand einen Tipp für mich?

    achso und außdem wollte ich dann mit guictrlread ($lst_overview) den Eintrag auslesen, aber er antwortet mir immer mit 0.. Egal was ich wähle...

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    2 Mal editiert, zuletzt von franzp (10. Oktober 2008 um 10:35)

  • Hi,
    habe dein Script mal ausprobiert.
    Habe voher noch Spalten einfügen lassen.
    Es wird nur die erste Spalte ausgefüllt, da du $i2 immer wieder auf 0 zurückgesetzt hast :D
    Auf jeden Fall geht es so:

    Spoiler anzeigen
    [autoit]

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

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

    $file = @ScriptDir & "\" & "test.txt"
    $i2 = 0

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

    $GUI = GUICreate("(UDF Created) ListView Create", 400, 300)
    $lst_overview = _GUICtrlListView_Create($GUI, "", 10, 10, 300, 100)

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

    ;Spalten einfügen
    _GUICtrlListView_InsertColumn($lst_overview, 0, "Column 1", 30)
    _GUICtrlListView_InsertColumn($lst_overview, 1, "Column 2", 30)
    _GUICtrlListView_InsertColumn($lst_overview, 2, "Column 3", 30)
    _GUICtrlListView_InsertColumn($lst_overview, 3, "Column 3", 30)
    _GUICtrlListView_InsertColumn($lst_overview, 4, "Column 3", 30)

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

    GUISetState()

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

    _func()
    Sleep(1000)
    _func()

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

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

    Func _func()
    $count = _FileCountLines($file)
    For $i = 1 To $count
    $line = FileReadLine($file, $i)
    $line = StringSplit($line, "|")
    _GUICtrlListView_AddItem($lst_overview, $line[1], $i) ; datum
    _GUICtrlListView_AddSubItem($lst_overview, $i2, $line[2], 1) ; start
    _GUICtrlListView_AddSubItem($lst_overview, $i2, $line[3], 2) ; pause
    _GUICtrlListView_AddSubItem($lst_overview, $i2, $line[4], 3) ; end
    _GUICtrlListView_AddSubItem($lst_overview, $i2, $line[5], 4) ; kommentar
    $i2 += 1
    Next

    $text = _GUICtrlListView_GetItemText($lst_overview, 3, 2) ;um den Text eines Items auszulesen
    MsgBox(0, "", $text)
    EndFunc ;==>_func

    [/autoit]

    Am Ende steht auch wie man den Text eines Items auslesen kann

    Die txt-Datei mit der ich es getestet habe sieht so aus

    Code
    1|2|3|4|5
    6|7|8|9|10
    1|2|3|4|5
    6|7|8|9|10
    1|2|3|4|5

    PS: Nächstes Mal bitte ein Script mit der GUI, damit man es sofort testen kann :thumbup:

  • Ich hatte $i2 absichtlich in diese funktion gepackt, weil ich will, dass er bei jedem Aufruf die Einträge durch die neuen items ersetzt oder vorher löscht. Aber wenn ich $i2 außerhalb der Funktion habe werden beim nächsten aufruf die einfach angehängt, aber das will ich garnicht. Deswegen hatte ich auch die ganzen delete befehle aufgelistet, weil ich die alten items irgenwie vorher raus löschen möchte. Aber ich krieg das nicht hin.

    Das $i2 innerhalb der Funktion klappt auch beim ersten Aufruf, aber beim zweiten dann nicht mehr :(

    Vielen Dank für die Mühe !!
    Leider ist die GUI ziemlich groß, weil Sie aus mehreren Tabs besteht. Deswegen wollte ich das erstmal niemand antun das durch zu sehen.

    Ok ich werde das nächste mal eine kleine Gui dafür erstellen. :whistling:

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Hm,
    habe es auch nicht hinbekommen mit dem löschen.
    Ich finde die "neuen" Listviews eh nicht so toll, eben wegen diesen "Problemen".

    Ich nehme daher immernoch die "alten" Listviews. (GUICtrlCreateListView)
    Damit funktioniert alles, außer du brauchst Sachen wie Icons, Checkboxen usw.

  • ich habe das Listview mit dem Koda erzeugt. Kann ich denn damit auch die "alten" Listviews erzeugen? Ich brauche keine checkboxen und sonstiges. Ich wusste nichtmal dass es neue und alte listviews gibt.

    eines der Elemente wir so erzeugt:

    [autoit]

    $lst_view = GUICtrlCreateListView("Datum|Start|Pause|Ende|Kommentar", 24, 232, 514, 46)

    [/autoit]

    müsste doch die alte sein oder?

    schönen Dank.

    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    • Offizieller Beitrag

    Es gibt kein "altes" oder "neues" Listview-Control. Es wird nur unterschiedlich generiert.
    Die LV-Form in der UDF gibt ein Handle zurück - alle weiteren Funktionen der UDF erfordern dieses.
    Um alle UDF-Funktionen mit dem "alten" LV nutzen zu können:

    [autoit]

    $ListView = GUICtrlCreateListView(....) ; gibt ID zurück
    $hListView = GUICtrlGetHandle($ListView) ; gibt das Handle zurück

    [/autoit]


    Ich handhabe das grundsätzlich so, und hatte bisher keinerlei LV-Probleme.

  • ja so geht´s. 8o

    Da wäre ich nie drauf gekommen !
    Danke!

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---