Dynamisches ListView-Item

  • Hallo Leute.

    Ich habe da ein Problem mit dem Erstellen bzw. der Rückgabe von selektierten ListView-Items.

    Ich habe für ein Script eine Steuerdatei (kategorie.dat) die den Inhalt der ListView-Items beinhaltet.
    Diese kann heute 3 Einträge enthalten, und morgen 30, 300 oder was auch immer.
    Also wollte ich die (Checkboxen) dynamisch aus einem Array, in das ich die Datei "kategorie.dat" lade, aufbauen.

    Die Rückgabe sollte (kommegetrennt) alle selektierten Einträge enthalten.
    Also z.B. Kategorieeintrag 5,Kategorieeintrag 3,Kategorieeintrag 6,Kategorieeintrag 2

    Ich bekomme das einfach nicht hin.
    Wo liegt denn hier der Fehler?

    Anbei mal der Code & die kategorie.dat

    [EDIT] Sorry, würde den Code gerne hier einhängen, aber er macht komischerweise immer "Grütze" daraus...


  • Sooo... Hier gehts.

    [autoit]

    ;Include die benötigte UDF's
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <ListviewConstants.au3>

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

    ;Umwandeln der Datei in ein Array
    Dim $array
    _FileReadToArray("kategorie.dat", $array)

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

    ;Array anzeigen
    _ArrayDisplay($array, "Der Array")

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

    GUICreate("Kategorie", 220, 300, 200, 250)

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

    $listview = GUICtrlCreateListView("Kategorie 1", 10, 10, 200, 200, $LVS_SORTASCENDING, $LVS_EX_CHECKBOXES)
    $button = GUICtrlCreateButton("Auswählen", 75, 250, 70, 20)

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

    For $item = 1 To $array[0]
    $content = GUICtrlCreateListViewItem($array[$item], $listview)

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

    Next

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

    GUISetState()

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

    Do
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $button

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

    $uebergabe = GUICtrlRead($listview)
    $uebergabe2 = GUICtrlGetState($listview)

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

    MsgBox(0, "listview item", $uebergabe, 2)
    MsgBox(0, "listview item", $uebergabe2, 2)
    EndSelect

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

    Until $msg = $GUI_EVENT_CLOSE
    Exit

    [/autoit]

    "Ausdauer wird früher oder später belohnt – meistens aber später" (Wilhelm Busch)

    • Offizieller Beitrag

    Wenn ich dich recht verstehe, willst du wissen, welche Item markiert sind und diese als kommagetrennten String ausgeben.

    Einfach so:

    [autoit]

    Global $array[5] = [4,'alpha','beta','gamma','delta']

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

    GUICreate("Kategorie", 220, 300, 200, 250)

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

    $listview = GUICtrlCreateListView("Kategorie 1", 10, 10, 200, 200, $LVS_SORTASCENDING, $LVS_EX_CHECKBOXES)
    $hLV = GUICtrlGetHandle($listview)
    $button = GUICtrlCreateButton("Auswählen", 75, 250, 70, 20)
    For $item = 1 To $array[0]
    $content = GUICtrlCreateListViewItem($array[$item], $listview)
    Next
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    Select
    Case $msg = $button
    $sChecked = ''
    For $i = 0 To _GUICtrlListView_GetItemCount($hLV) -1
    If _GUICtrlListView_GetItemChecked($hLV, $i) Then $sChecked &= _GUICtrlListView_GetItemText($hLV, $i) & ', '
    Next
    ConsoleWrite( 'Ausgewählt: ' & StringTrimRight($sChecked, 2) & @LF)
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE
    Exit

    [/autoit]