ich checks nicht ... checkbox in listview

  • Hi,

    die items werden später durch eine sql-abfrage eingefügt. die daten werden auch richtig in die spalten geschrieben.

    [autoit]

    For $i = 1 To $DBCount
    $index = _GUICtrlListView_AddItem($list1, "")
    _GUICtrlListView_AddSubItem($list1, $index, $aResult[$i][0], 1)
    _GUICtrlListView_AddSubItem($list1, $index, $aResult[$i][1], 2)
    _GUICtrlListView_AddSubItem($list1, $index, $aResult[$i][2], 3)
    _GUICtrlListView_AddSubItem($list1, $index, $aResult[$i][3], 4)
    _GUICtrlListView_AddSubItem($list1, $index, $aResult[$i][4], 5)
    Next

    [/autoit]

    aber ich muss doch trotzdem bei allen items eine checkbox sehen, die halt leer ist.

  • Teste einmal diese Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #Include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 357, 366, 192, 124)
    $ListView = GUICtrlCreateListView(" |Hi|Moin|xD", 0, 0, 353, 335, _
    BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) ;$LVS_SHOWSELALWAYS
    ; wichtig ist der Stil $LVS_Report und der eweiterte Stil $LVS_EX_Checkboxes
    $CheckIt = GUICtrlCreateButton("&Check", 120, 340, 113)
    For $i = 1 To 99
    GUICtrlCreateListViewItem("|" & $i & "| aaaaaaaaaaaaaa|" & $i, $ListView)
    Next
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $CheckIt
    For $i = 0 To _GUICtrlListView_GetItemCount($ListView) - 1
    ;Schleifenbeginn da das erste Item den Index 0 hat von 0 bis Anzahl -1

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

    If _GUICtrlListView_GetItemChecked($ListView, $i) Then ; wenn geChecked (angehakt) dann
    $aItemText = _GUICtrlListView_GetItemTextArray($ListView, $i)
    ;Inhalt aller Spalten dieser Zeile dem Array $aItemText zuweisen
    ;$aItemText[0] enthält die Anzahl der Spalten
    ;$aItemText[1] Checked oder Unchecked (wir haben aber nur geChecked also keine Auswertung erforderlich)
    ;$aItemText[2] Hi
    ;$aItemText[3] Moin
    ;$aItemText{4]xD
    ConsoleWrite($aItemText[2] & " " & $aItemText[3] & @CRLF)

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

    ; Automatisch an die Stelle hinscrollen
    _GUICtrlListView_EnsureVisible($ListView, $i)
    Sleep(Random(250,750,1))
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]

    mfg autoBert

  • Hey,

    danke, das bsp hat funktioniert. ich hab mal etwas rumgetestet und gesehen, wenn ich folgendes NICHT im script habe, funkitoniert auch meine variante.

    [autoit]

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    [/autoit]

    das habe ich aber drin, weil ich, sofern etwas un/checked wird, direkt eine function ausführen möchte.
    oder gibt es da noch ne alternative im on Event modus? ich möchte ungern etwas in ne schleife packen.

    • Offizieller Beitrag

    Das Registrieren der Msg allein kann dieses Verhalten nicht verursachen. Vermutlich verläßt du die Register-Funktion an einer Stelle ohne Return $GUI_RUNDEFMSG. Dann wird diese Msg nicht von Windows 'normal' weiterverarbeitet.
    Bzw. du führst von dort eine Funktion aus, die im Zeitrahmen nicht vorhersehbar ist. DAS darf auf keinen Fall passieren.

    • Offizieller Beitrag

    Übrigens, wenn du aus den Registerfunktionen heraus Funktionen starten willst mit ungewisser Dauer oder auch Msgboxen aufrufen, dann kannst du das durchaus mit einem kleinen Umweg:
    - DummyCtrl erstellen
    - für Dummy die gewünschte Aktion hinterlegen
    - mit GUICtrlSendToDummy Ereignis auslösen
    Wenn du bereits ein Ctrl hast, dass diese Funktion sowieso auslöst, kannst du auch
    _SendMessage($hGUI, $WM_COMMAND, $iCtrl, 0)
    oder
    _WinAPI_PostMessage($hGUI, $WM_COMMAND, $iCtrl, 0)
    verwenden.