Ich möchte ein ListView mit _GUICtrlListView_RegisterSortCallBack() und später dann mit _GUICtrlListView_SortItems() sortieren, Damit die Rückgabe von GUICtrlGetState() beim ListView aber die richtige Spalte zurückgibt (Ziel ist 0), muss ich den Fokus auf den Header der Spalte 0 setzen.
Meine letzte/einzige Lösung ist ControlClick(). Hat jemand eine bessere Idee, damit das Ergebnis von GUICtrlGetState($idListView) das gewünschte ist ?
Hier mein Test-Script:
C
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
$hMainGUI = GUICreate("ListView Init-Sort-Test", 400, 200, 100, 100, -1, $WS_EX_ACCEPTFILES)
$idListview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 380, 180)
$idItem1 = GUICtrlCreateListViewItem("bbb|data11|data21", $idListview)
$idItem2 = GUICtrlCreateListViewItem("ddd|data12|data22", $idListview)
$idItem3 = GUICtrlCreateListViewItem("aaa|data13|data23", $idListview)
_GUICtrlListView_RegisterSortCallBack($idListview, 2, True)
GUICtrlSetState($idListview, $GUI_DROPACCEPTED)
GUICtrlSetResizing($idListview, $GUI_DOCKAUTO)
GUISetState(@SW_SHOW)
; folgendes bekomme ich nicht hin:
$h_LV_Header = _GUICtrlListView_GetHeader(GUICtrlGetHandle($idListView))
_SendMessage($h_LV_Header, $HDM_SETFOCUSEDITEM, 0, 1)
MsgBox(0,"Status","Sortierung nach Spalte (0 ist Ziel): " & GUICtrlGetState($idListview))
; folgendes auch nicht:
GUICtrlSendMsg($idListView, $LVM_SETSELECTEDCOLUMN, 0, 0)
MsgBox(0,"Status","Sortierung nach Spalte (0 ist Ziel): " & GUICtrlGetState($idListview))
; folgendes auch nicht:
_GUICtrlListView_SetItemFocused(_GUICtrlListView_GetHeader(GUICtrlGetHandle($idListView)), 0)
MsgBox(0,"Status","Sortierung nach Spalte (0 ist Ziel): " & GUICtrlGetState($idListview))
; mit ControlClick klappt es
ControlClick($hMainGUI, "", _GUICtrlListView_GetHeader(GUICtrlGetHandle($idListview)),"left",1,10,10)
MsgBox(0,"Status","Sortierung nach Spalte (0 ist Ziel): " & GUICtrlGetState($idListview) & @CRLF & @CRLF & "damit eine anschließende Sortierung mit" & @CRLF & "'_GUICtrlListView_SortItems($idListview, GUICtrlGetState($idListview)' klappt !")
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_GUICtrlListView_UnRegisterSortCallBack($idListview)
ExitLoop
Case $idListview
_GUICtrlListView_SortItems($idListview, GUICtrlGetState($idListview))
EndSwitch
WEnd
Alles anzeigen