Listview checked items in Ini speichern

  • Hi Leute
    Ich versuche die im Listview checked Items in eine Ini zu speichern aber leider klappt es nicht so wie ich es will.

    Meine Versuche

    Spoiler anzeigen
    [autoit]

    $sOut2 = ''
    For $i = 0 To _GUICtrlListView_GetItemCount($ListView1) - 1
    If _GUICtrlListView_GetItemChecked($ListView1, $i) Then _
    $sOut2 = _GUICtrlListView_GetItemText($ListView1, $i, 0)
    IniWrite(@ScriptDir&"\Maps.ini", "Section", "key",$sOut2 ))

    [/autoit]


    Die Ini sieht dann so aus...

    Spoiler anzeigen

    [Section]
    key=castillos_rocky_2881603500334490387.fc2map


    und wenn ich es so mache...

    Spoiler anzeigen
    [autoit]

    IniWrite(@ScriptDir & "\Maps.ini", "Section", $i, $sOut2)

    [/autoit]


    sieht es so aus.

    Spoiler anzeigen

    [Section]
    0=AR-16_Rumik - Pac!ent_2921486164596879929.fc2map
    1=Avatar sniper_PcsKiller_2307221835651582756.fc2map
    2=B32 SNIPER CLIFF ( NO CROSS )_PCS KILLER_3414014144499745551.fc2map
    3=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    4=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    5=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    6=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    7=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    8=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    9=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    10=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    11=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    12=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    13=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    14=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    15=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    16=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    17=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    18=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    19=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    20=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    21=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    22=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    23=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    24=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    25=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    26=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    27=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    28=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    29=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    30=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    31=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map


    Wie kann ich erreichen das nur die checked items in die Ini geschrieben werden?
    Ist das überhaupt realisierbar?

    Einmal editiert, zuletzt von VinceA (12. Mai 2013 um 10:07)

    • Offizieller Beitrag

    Wie kann ich erreichen das nur die checked items in die Ini geschrieben werden?
    Ist das überhaupt realisierbar?


    :D
    Schau dir mal deine Code an: Du prüfst ob das Item gecheckt ist und setzt bei gecheckt $sOut2 auf den Itemwert.
    Aber: Unabhängig von der Überprüfung schreibst du anschließend bei jedem Schleifendurchlauf in die INI! Das darf natürlich nur innerhalb des If-Statements passieren.

  • Tip Top, es funktioniert :)
    Also ich hab $sOut2 entfernt und _GUICtrlListView_GetItemText in IniWrite integriert.

    Spoiler anzeigen
    [autoit]

    For $i = 0 To _GUICtrlListView_GetItemCount($ListView1) - 1
    If _GUICtrlListView_GetItemChecked($ListView1, $i) Then
    IniWrite(@ScriptDir & "\Maps.ini", "Section", $i, _GUICtrlListView_GetItemText($ListView1, $i, 0))
    EndIf
    Next

    [/autoit]


    Die Ini Datei.

    Spoiler anzeigen

    [Section]
    0=AR-16_Rumik - Pac!ent_2921486164596879929.fc2map
    1=Avatar sniper_PcsKiller_2307221835651582756.fc2map
    2=B32 SNIPER CLIFF ( NO CROSS )_PCS KILLER_3414014144499745551.fc2map
    3=B32 Tower war ( NO CROSS )_pcs killer_2377096040381240610.fc2map
    4=Bloody Valentine b.g_Badgirl4045_2595461279577437458.fc2map
    5=castillos_rocky_2881603500334490387.fc2map
    6=Cerros_Djamboo_3387031232638884750.fc2map
    7=Copan =A.o.S=_A.o.S.Djamboo_3382536806195096634.fc2map
    8=Crater Lake Dastiquel_GiTM Djamboo_2310500427957699614.fc2map
    9=Hole In The Ground v5.2_NC {1S2K}-=VictorWolf=- _-=VictorWolf=- _2607650652194403900.fc2map


    Es funktioniert , aber ist es von der programmierlogik her richtig?
    Was ich nicht verstehe, warum fällt das EndIf weg wenn ich If und Then in einer Zeile schreibe?

    Spoiler anzeigen
    [autoit]

    For $i = 0 To _GUICtrlListView_GetItemCount($ListView1) - 1
    If _GUICtrlListView_GetItemChecked($ListView1, $i) Then IniWrite(@ScriptDir & "\Maps.ini", "Section", $i, _GUICtrlListView_GetItemText($ListView1, $i, 0))
    Next

    [/autoit]
    • Offizieller Beitrag

    Was ich nicht verstehe, warum fällt das EndIf weg wenn ich If und Then in einer Zeile schreibe?


    Then steht immer in derselben Zeile wie If  :whistling:

    Es gibt einzeilige Statements, wenn also nach dem Statement nur ein Befehl ausgeführt wird, dann kann das alles in einer Zeile erfolgen und ein EndIf ist nicht erforderlich.

    [autoit]

    If $A = $B Then Return $C

    [/autoit]

    Wenn mehrere Befehle nach dem Statement ausgeführt werden sollen muß der Befehlsblock durch EndIf beendet werden.

    [autoit]

    If $A = $B Then
    $C = 5
    $D = 6
    EndIf

    [/autoit]