Hi,
zum Sortieren brauchst du keinen Extra-Button. Das kannst du per Klick auf den Spaltenkopf lösen.
Ich habe mal das Bsp. aus der Hilfe "entschlackt":
Spoiler anzeigen
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
Global $hListView
[/autoit] [autoit][/autoit] [autoit]GUICreate("ListView SimpleSort", 400, 300)
$hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
_GUICtrlListView_SetColumnWidth($hListView, 0, 75)
_GUICtrlListView_SetColumnWidth($hListView, 1, 75)
_GUICtrlListView_SetColumnWidth($hListView, 2, 75)
GUISetState()
; die 2 Folgezeilen in dein Skript einfügen und die Func WM_NOTIFY
; dann kannst du per Klick auf den Spaltenkopf sortieren (auf/absteigend)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_COLUMNCLICK
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Edit
Und nun habe ich eine Anregung für dich ![]()
Bau das ganze etwas um unter Einbeziehung dieses Postings: IntelliSenseBox
Verwende statt der Datums-/Textfelder und Combos nur Inputfelder als IntellisenseBox.
Ich vermute, du machst deine Abrechnung monatlich. Somit kannst du beim Start die möglichen Datumseinträge als Liste hinterlegen und mit max. 2 eingegebenen Ziffern hast du das richtige Datum (geht schneller als Mausklickerei). In den Combos geht das ja auch jetzt schon - könnte man aber auch ersetzen wegen der Optik
.
Für die Zeit könntest du ein formatiertes Input erstellen, das dir den : automatisch setzt, sodass du einfach die Zeit 4-stellig hintereinander eingibst. Zum Formatieren findest du Infos im Forum.
Wenn du das alles verwendest, brauchst du nicht mehr zur Maus greifen und schaffst dein Formular in 2 Minuten ![]()