Jump to content

Eval control ID variable


Rhyono
 Share

Recommended Posts

I have a couple dozen checkboxes and their states are saved in a binary string.

It looks like eval and execute are only for transferring/computing values, rather than creating a variable name.

The checkboxes are numbered, following the format of $chkBox1, $chkBox2, etc.

I was hoping to be able to do loop through and be able to take the string "$chkBox" and append the current value the loop is on in, then set if it is checked with GUICtrlSetState.

The way I tried it was: GUICtrlSetState(Eval("$chkBox" & $currentID),$GUI_UNCHECKED)

Is there a way to do that with Eval/Execute and I'm just doing it incorrectly or is it not possible by that method or any other?

Link to comment
Share on other sites

Ryhono,

If you want to use "dynamic" variable names it could be done like this.

#include <GUIConstantsEx.au3>

#AutoIt3Wrapper_Add_Constants=n

local $msg

local $gui010 = guicreate('Checkbox Controls Using an Array for the Control ID')

for $1 = 1 to 15
    guictrlcreatelabel('CheckBox #' & stringformat('%02i',$1),10, $1 * 25,90,20)
    assign('checkbox' & $1,GUICtrlCreateCheckbox('',95, $1 * 25,20,15))
Next

guisetstate()

while 1

    $msg = guigetmsg()

    switch $msg
        case $gui_event_close
            Exit
        case eval('checkbox' & 1) to eval('checkbox' & 15)
            for $1 = 1 to 15
                if guictrlread(eval('checkbox' & $1)) = $gui_checked then
                    ConsoleWrite('Checkbox #' & stringformat('%02i',$1) & ' checked' & @LF)
                else
                    ConsoleWrite('Checkbox #' & stringformat('%02i',$1) & ' unchecked' & @LF)
                endif
            next
    EndSwitch

wend

However, this makes reading and debugging the code more difficult than it need be. You will generally find multiple checkboxes implemented using an array like this.

#include <GUIConstantsEx.au3>

#AutoIt3Wrapper_Add_Constants=n

local $ckb_cntrls[16], $msg

ConsoleWrite(ubound($ckb_cntrls) - 1 & @LF)

local $gui010 = guicreate('Checkbox Controls Using an Array for the Control ID')

for $1 = 1 to 15
    guictrlcreatelabel('CheckBox #' & stringformat('%02i',$1),10, $1 * 25,90,20)
    $ckb_cntrls[$1] = GUICtrlCreateCheckbox('',95, $1 * 25,20,15)
Next

guisetstate()

while 1

    $msg = guigetmsg()

    switch $msg
        case $gui_event_close
            Exit
        case $ckb_cntrls[1] to $ckb_cntrls[ubound($ckb_cntrls) - 1]
            for $1 = 1 to ubound($ckb_cntrls) - 1
                if guictrlread($ckb_cntrls[$1]) = $gui_checked then
                    ConsoleWrite('Checkbox #' & stringformat('%02i',$1) & ' checked' & @LF)
                else
                    ConsoleWrite('Checkbox #' & stringformat('%02i',$1) & ' unchecked' & @LF)
                endif
            next
    EndSwitch

wend

Both of these examples list the state of all checkboxes when any checkbox is actioned.

kylomas

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Link to comment
Share on other sites

I would still use the advice of kylomas and use an array, there are only a handful of occasions when you should use Eval/Assign, this isn't one of them.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...