nullschritt Posted July 21, 2013 Share Posted July 21, 2013 (edited) I searched around for a bit before asking this, so please bear with me. Currently I have a program where only one checkbox in a list can be selected, but I want to make it so that it;s impossible to have zero boxes checked.For example if user unchecks a box, it should re-check itself. (I am trying to get a radio-option type effect with checkboxes in a listview) See below:http://youtu.be/V1yEsU6oQ6s I want to make it so one box is always checked. How should I go about this? Thanks as always for your time. (:It doesn't actually even have to re-check the same box that was un-checked, as long as it checks a box when one is unchecked. Edited July 21, 2013 by nullschritt Link to comment Share on other sites More sharing options...
FireFox Posted July 21, 2013 Share Posted July 21, 2013 (edited) Edit2:Final example (and completed notes) :expandcollapse popup#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListView.au3> Global Const $LVM_CHECKED = 8192, $LVM_UNCHECKED = 4096 Global $iLastItemChecked = -1, $blItemAdded = False #region GUI Local $hGUI = GUICreate("MyGUI", 500, 500) Global $iLw1 = GUICtrlCreateListView("Column1|Column2", 10, 10, 480, 250, Default, $LVS_EX_CHECKBOXES) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") For $i = 0 To 9 $blItemAdded = True GUICtrlCreateListViewItem("Item " & $i, $iLw1) Next _GUICtrlListView_SetItemChecked($iLw1, 1) $iLastItemChecked = 1 GUISetState(@SW_SHOW, $hGUI) #endregion GUI Local $aText = 0 While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch Sleep(10) WEnd GUIDelete($hGUI) Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) Local $iIDFrom = 0, $iCode = 0, $tNMHDR = 0, $tInfo = 0 $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $iIDFrom Case $iLw1 Switch $iCode Case $LVN_ITEMCHANGED $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) $iNewState = DllStructGetData($tInfo, "NewState") Switch $iNewState Case $LVM_CHECKED If $iLastItemChecked <> -1 Then _GUICtrlListView_SetItemChecked($iLw1, $iLastItemChecked, False) EndIf $iLastItemChecked = DllStructGetData($tInfo, "Item") Case $LVM_UNCHECKED If $blItemAdded Then $blItemAdded = False Return $GUI_RUNDEFMSG EndIf _GUICtrlListView_SetItemChecked($iLw1, DllStructGetData($tInfo, "Item")) ;re-check the unchecked item EndSwitch EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFYNotes:-I replaced the code $LVN_ITEMCHANGING to the code $LVN_ITEMCHANGED, otherwise the checkbox is not yet unchecked (and can not be automatically re-checked).-I added the $blItemAdded var, otherwise the item created is checked (because on its creation the $LVM_UNCHECKED status is called).If you want to create/insert other items, don't forget to update this last to true.Br, FireFox. Edited July 21, 2013 by FireFox Link to comment Share on other sites More sharing options...
gcue Posted January 20, 2016 Share Posted January 20, 2016 thanks firefox - this was very handy (capturing listview checkbox actions) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now