GUIListView - Bei Erneuerung neuen Itemindex finden

  • Hallo.
    Ich arbeite mal wieder mit einer Listview.
    Als Beispiel habe ich jetzt ein Script, das alle Fenster auflistet. Wenn diese Liste erneuert wird, also alle Fenster neu geladen werden, dann geht die Selektierung verloren. Das hinzukriegen, dass dem nicht so ist, ist nicht das Problem. Ich lese das selektierte Item aus, nach dem Erneuern suche ich das Item anhand des Namens, bekomme den neuen Index und selektiere es. In der Listview steht in der ersten Spalte die Nr. des Fensters, in der zweiten der Fenstername. Das Problem ist, dass meine jetzige Methode nur mit der ersten Spalte klappt, also der Nr des Fensters, da sich die aber ändert wenn Fenster geschlossen oder neu geöffnet werden, ist das Müll. Deshalb möchte ich anhand des Fensternamen den neuen Itemindex finden, nur sucht die Funktion _GUICtrlListView_FindText der erste Spalte ab.
    Gibt es da irgendeine Möglichkeit mit der zweiten Spalte zu arbeiten?

    Beispielcode:

    Spoiler anzeigen
    [autoit]

    #include <GUIListView.au3>

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

    $hGUI = GUICreate("ListView", 300, 430)
    $ListView = GUICtrlCreateListView("Nr.|Window", 10, 10, 280, 380, BitOR($LVS_SINGLESEL, $LVS_SHOWSELALWAYS), $LVS_EX_FULLROWSELECT)
    $ListViewHandle = GUICtrlGetHandle($ListView)
    $Refresh = GUICtrlCreateButton("Refresh List", 10, 400, 280)

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

    _Refresh()
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $Refresh
    $vSelectedItem = ""
    If _GUICtrlListView_GetSelectedCount($ListView) >= 1 Then
    $vSelectedItem = _GUICtrlListView_GetItemText($ListViewHandle, _GUICtrlListView_GetSelectedIndices($ListViewHandle)) ;previous selected item to select it after the refresh
    ;$vSelectedItem = _GUICtrlListView_GetItemText($ListViewHandle, _GUICtrlListView_GetSelectedIndices($ListViewHandle), 1) ;previous selected item to select it after the refresh
    EndIf

    _GUICtrlListView_DeleteAllItems($ListView)
    ControlFocus($hGUI, "", $ListView)

    _Refresh()

    $vNewItemIndex = _GUICtrlListView_FindText($ListViewHandle, $vSelectedItem, Default, False) ;Find the new Itemindex
    _GUICtrlListView_SetItemSelected($ListViewHandle, $vNewItemIndex, True, True) ;select the item
    EndSwitch
    Sleep(5)
    WEnd

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

    Func _Refresh()
    Local $vWinCount = 0, $vWinList = WinList()

    For $i = 1 To $vWinList[0][0]
    If $vWinList[$i][0] <> "" Then
    $vWinCount += 1
    GUICtrlCreateListViewItem($vWinCount & "|" & $vWinList[$i][0], $ListView)
    EndIf
    Next
    EndFunc

    [/autoit]

    MfG

    Einmal editiert, zuletzt von NoName (21. November 2009 um 00:33)

  • Oh, das habe ich gar nicht gesehen... Habe mir die Funktion auch angeguckt aber ich dachte da wäre ein anderer Unterschied.
    Naja, der Code von der Funktion ist ja jetzt nicht grad der schwerste, und zu umfangreich, also schreibe ich mir die Funktion jetzt selbst.

    Dankeschön.