ListView SelectionChangeEvent bei Mehrfachauswahl

  • Hi,

    ich möchte unter einer Listview mit Mehrfachauswahl, bei Änderung der Auswahl, die Anzahl der ausgewählten Elemente in einem Label anzeigen.
    Das nachfolgende Script funktioniert solang man zur Mehrfachauswahl Strg + (Maus oder Leertaste) verwendet. Wählt man aber einen Bereich mit Shift + Maus/Cursor-Tasten aus so wird der Label nicht aktualisiert.
    Bin für jeden Vorschlag dankbar, probier jetzt schon ewig rum.

    Vielen Dank vorab.

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>
    #include <GuiListView.au3>
    Local $msg
    GUICreate("My GUI") ; will create a dialog box that when displayed is centered
    GUISetState(@SW_SHOW) ; will display an empty dialog box
    ;~ Listview erstellen
    $lv=GUICtrlCreateListView("Rnd1|Rnd2|Rnd3",10,10,300,300,$LVS_SHOWSELALWAYS,Bitor($LVS_EX_FULLROWSELECT,$LVS_EX_GRIDLINES))
    ;~ 20 Zeilen mit Zufallswerten zwischen 1-50 hinzufügen
    for $i = 1 to 20
    GUICtrlCreateListViewItem(Random(1,50,1)&"|" & Random(1,50,1) & "|" & Random(1,50,1),$lv)
    Next
    ;~ Label der bei Änderung der Auswahl die Anzahl der ausgewählten Elemente anzeigen soll erstellen
    $lbl = GUICtrlCreateLabel("",10,320,300,20)
    $CurrentSelection = _GUICtrlListView_GetSelectionMark($lv)
    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()
    if _GuiCtrlListview_GetSelectionChange() Then
    GUICtrlSetData($lbl,_GUICtrlListView_GetSelectedCount($lv))
    EndIf

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

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

    GUIDelete()

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

    Func _GuiCtrlListview_GetSelectionChange()
    $oldSelection = $CurrentSelection
    $newSelection = _GUICtrlListView_GetSelectionMark($lv)
    if $oldSelection <> $newSelection Then
    $CurrentSelection = $newSelection
    return True
    Else
    return False
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Bote (15. April 2012 um 15:19)

  • Hallo Bote,

    mach es doch einfach so:

    [autoit]

    While 1
    $msg = GUIGetMsg()
    $iSelected =_GUICtrlListView_GetSelectedCount($lv)
    if $iSelected<> GUICtrlRead($lbl) Then GUICtrlSetData($lbl,$iSelected)
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    [/autoit]

    mfg autoBert