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
#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)
_Refresh()
GUISetState()
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
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
MfG