Listbox wird immer mit letztem Eintrag angezeigt

  • Hallo Gemeinde,

    mit der folgenden Funktion erzeuge ich dynamisch beim Programmstart eine ListBox deren Einträge aus der ini-Datei ausgelesen werden.
    Diese wiederum bestehen aus den Dateinamen des definierten Ordners. Alles funzt soweit prima.
    Nur beim Programmstart wird die Listbox immer mit dem letzten Eintrag angezeigt, anstatt mit dem ersten.
    Wie kann ich erreichen, das die Listbox immer mit dem ersten Eintrag angezeigt wird?

  • woher weißt du das es der letzte Eintrag ist, wie ermittelst du den welcher Eintrag zu erst da war ? an den Datei Zeiten ?!

    Nutzt du die ini Datei, für ein weiteres Skript oder verarbeitest du alles in diesem Skript?
    Falls du es alles in einem rutsch machst musst du dir keine ini Datei erstellen lassen ?!

    es mag sein das es einer Datenbank ähnelt sie ist es aber nicht.
    aber wenn eh alle Dateien auf dem System verfügbar hast kannst du auch gleich aus dem Explorer Datenlesen ^^
    und da kannst du dann auch filtern nach Datum/zeit Ersteller Datum Änderung Datum und was es sonst noch so gibt.

    Leider habe ich entweder deine frage nicht verstanden oder es ist dem umstand geschuldet das ich nicht die selben Bedingungen habe wie du auf dem PC habe.
    ich habe zum testen Dateien erstellt mit QR- vorne damit ich dein code ausführen kann. aber woher soll nun mein System wissen was zu erst kommen soll ?

  • Ich hab das ganze mal so umgebaut, wie ich das Error-Handling eher gestalten würde: Die Funktion gibt True/False zurück, je nach Erfolg, und setzt die entsprechenden Error-Codes, die nach dem Aufruf der Funktion behandelt werden.

    Das ganze behebt aber nicht dein eigentliches Problem. Dazu ein paar Anmerkungen/Fragen:

    1. Wieso liest du erst die Ini-Datei, dann befüllst du sie mit den aktuellen Dateien (und überschreibst dabei die alten Daten) und schreibst dann die alten Daten in die ListBox? Von dem was ich vom Code/deiner Fragenstellung vermute ergibt das keinen Sinn.
    2. MsgBox(16, "Fehler", "Die INI-Datei konnte nicht gelesen werden.") wird ausgegeben, wenn irgendein Fehler bei Sleep(200) aufgetreten ist??? Bedenke: @error wird bei jeglichem Funktionsaufruf auf 0 zurückgesetzt. Die Zeile kann also nie erreicht werden, da Sleep keine Fehlercode geben kann. Ich habe für meine Code-Änderung angenommen, dass sich die ganzen If @error Zeilen auf IniReadSection beziehen.
    3. Brauchst du die Ini überhaupt? Wenn ja, wofür? Du kannst eigentlich die Daten mit _FileListToArray einlesen und direkt in die ListBox schreiben.
    4. Was für eine Sortierung stellst du dir vor? Weder _FileListToArray noch IniReadSection garantieren, dass irgendeine Reihenfolge der Daten vorliegt. Normalerweise lesen sie von oben nach unten/alphabetisch, aber das kann sich auch aus irgendwelchen Gründen ändern. Vermutlich brauchst du also so oder so ein _ArraySort, oder etwas ähnliches.

  • 3. Brauchst du die Ini überhaupt? Wenn ja, wofür? Du kannst eigentlich die Daten mit _FileListToArray einlesen und direkt in die ListBox schreiben.
    4. Was für eine Sortierung stellst du dir vor? Weder _FileListToArray noch IniReadSection garantieren, dass irgendeine Reihenfolge der Daten vorliegt. Normalerweise lesen sie von oben nach unten/alphabetisch, aber das kann sich auch aus irgendwelchen Gründen ändern. Vermutlich brauchst du also so oder so ein _ArraySort, oder etwas ähnliches.

    genau, das meine ich auch, oder er geht einfach nach den Attributen der Dateien, die lassen sich ja auch einfacher sortieren, je nadem was er mit den daten macht.

  • Hallo Mojoeb,
    hallo Kanasius,

    ich glaube meine Fragestellung war wohl genauso unperfekt wie der Code. :D

    Es geht mir nicht ums Einlesen der Dateinamen als Einträge für eine ini-datei! Das funzt ja schon. Das eigentliche Problem:

    Beim Erstellen der Listbox beim Programmstart ist diese dann ganz nach unten gescrollt und der letzte Eintrag ist blau hinterlegt.
    Ich hätte gerne aber das die Listbox so angezeigt wird, dass der erste Eintrag da steht. also nicht herunter gescrollt.

  • Jetzt bin ich total verwirrt. ich habe ein TestScript erstellt.
    Wenn ich es starte, wird die Listbox richtig dargestellt.


  • Hallo Gemeinde,

    bedingt durch die Denkanstöße habe ich die Sache mit der ini-Datei gelöscht (war eine Altlast aus dem aller ersten Entwurf).
    Stattdessen habe ich die Funktion jetzt so erstellt:

    Code
    Func CreateListBox()
    	
    	GUICtrlSetData($QrCodeList, "||") ; eine LeerZeile am Anfang einblenden
    	$aFileList = _FileListToArray("E:\Arbeit\Batchdateien\Scripte\QR-CodeGenerator\data", "QR_*")
    	; Einträge durchlaufen und zur Listbox hinzufügen
    	For $i = 1 To $aFileList[0]
    		$sHelp = GUICtrlSetData($QrCodeList, $aFileList[$i])
    	Next
    
    EndFunc   ;==>CreateListBox

    Was soll ich sagen. So wird die Listbox richtig angezeigt. :rock:

    Vielen lieben aller herzlichsten Dank an Mojoeb und Kanashius. ihr habt mir mit den ideen geholfen :klatschen::thumbup::thumbup::thumbup: