benjbong Posted November 10, 2011 Share Posted November 10, 2011 I have a gui window with a series of checkboxes created in an array as such: $chkboxes[0] = GUICtrlCreateCheckbox($payers[0][0], -1 * $cellWidth, 0) $left = 1 For $i = 1 to UBound($payers) -1 Step 1 Select Case $left = 3 ;Edit this number to change the number of columns of check boxes $chkboxes[$i] = Guictrlcreatecheckbox($payers[0][$i], -$left * $cellWidth, 0) $left = 1 Case else ;Adds checkboxes to existing row until row limit is reached $chkboxes[$i] = GUICtrlCreateCheckbox($payers[0][$i], 0, -1) $left += 1 EndSelect Next The checkbox array takes the elements of another array as the data and arranges them in columns. The form I have takes input from two other input boxes as well as at least 1 or more of these checkboxes and generates output when a button is pressed. I'm trying to set up form validation to make sure the user can't press the generate button until both input boxes are filled in and at least one of the checkboxes is checked. I use a Do.. While loop to check watch for various GUIGetMsg events such as when other buttons are pressed to perform an action. How can i add something to that loop that will check when ANY checkbox is added to enable/disable the generate button accordingly? Link to comment Share on other sites More sharing options...
benjbong Posted November 10, 2011 Author Share Posted November 10, 2011 Here's the solution, if anybody was wondering. You basically monitor GUIGetMsg() to see if it contains a member of the array as such: Do $msg = GUIGetMsg() Select Case $msg >= $chkboxes[0] and $msg <= $chkboxes[ubound($chkboxes) -1] Until $msg = $GUI_EVENT_CLOSE Link to comment Share on other sites More sharing options...
somdcomputerguy Posted November 10, 2011 Share Posted November 10, 2011 This code - If BitAnd(GUICtrlRead($Checkbox), $GUI_CHECKED) Then, can be used to check if a checkbox is checked. - Bruce /*somdcomputerguy */ If you change the way you look at things, the things you look at change. Link to comment Share on other sites More sharing options...
sleepydvdr Posted November 10, 2011 Share Posted November 10, 2011 I was thinking of a different way of doing it. With the example below, after checking one of the checkboxes, you must click somewhere in the gui to run a function that detects if any of the checkboxes are checked. The only problem with it is not being able to detect changes to the checkboxes directly. #include <GUIConstants.au3> #include <WindowsConstants.au3> Global $check1, $Checkbox1, $Checkbox2, $Checkbox3 GUIRegisterMsg($WM_LBUTTONDOWN, "_CheckForChange") $Form1 = GUICreate("Form1", 294, 152) $Button1 = GUICtrlCreateButton("Validate", 160, 48, 75, 25, 0) $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 32, 32, 97, 17) $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 32, 56, 97, 17) $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 32, 80, 97, 17) GUISetState(@SW_SHOW) GUICtrlSetState($Button1, $GUI_DISABLE) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 MsgBox(0, "", $check1) EndSwitch WEnd Func _CheckForChange() $check1 = GUICtrlRead($Checkbox1) $check2 = GUICtrlRead($Checkbox2) $check3 = GUICtrlRead($Checkbox3) If $check1 > 1 OR $check2 > 1 OR $check3 > 1 Then GUICtrlSetState($Button1, $GUI_ENABLE) Endif EndFunc #include <ByteMe.au3> 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