Incremental variable definition

a 夏天 提交于 2019-11-27 08:32:18

问题


I want to automatically define incrementing variable names.

So instead of this:

$Var1 = 'This is variable one :P'
$Var2 = 'This is variable two :P'

I'd like this (pseudo code):

For $i = 1 to UBound($People)-1     
    **$var[$i]** = GUICtrlCreateCheckbox($var[$i], 24, $y, 200, 17) 
    $y = $y + 25 
Next

Does anyone know how?

The code should make as many checkboxes as defined in an array and every checkbox should have its own variable.


回答1:


You're looking for the Assign function!

Check out this example:

For $i = 1 To 5
    Assign('var' & $i, $i);
Next

Then you can access these variables with:

MsgBox(4096, "My dynamic variables", $var1)
MsgBox(4096, "My dynamic variables", $var3)
MsgBox(4096, "My dynamic variables", $var5)

Obviously, var2 and var3 can be utilised too :)

Edit: For clarity, what you would have been doing, if you had done it properly, was storing those values in an array - which is the best method for this kind of thing.




回答2:


so instead of this:

$Var1 = 'This is variable one :P'
$Var2 = 'This is variable two :P'

I'd like this (pseudo code):

For $i = 1 to UBound($People)-1   
    **$var[$i]** = GUICtrlCreateCheckbox($var[$i], 24, $y, 200, 17) 
    $y = $y + 25 
Next

Does anyone know how this could be done?

As per Documentation - Intro - Arrays:

An Array is a variable containing a series of data elements. Each element in this variable can be accessed by an index number which relates to the position of the element within the Array - in AutoIt the first element of an Array is always element [0]. Arrays elements are stored in a defined order and can be sorted.

Dynamic checkbox creation example, assigning multiple checkbox-control identifiers to a single array (untested, no error-checking):

#include <GUIConstantsEx.au3>

Global Const $g_iBoxStartX = 25
Global Const $g_iBoxStartY = 25
Global Const $g_iBoxWidth  = 100
Global Const $g_iBoxHeight = 15
Global Const $g_iBoxSpace  = 0
Global Const $g_iBoxAmount = Random(2, 20, 1)
Global Const $g_iBoxTextEx = $g_iBoxAmount -1
Global Const $g_sBoxTextEx = 'Your text here.'

Global Const $g_iWindDelay = 50
Global Const $g_iWinWidth  = $g_iBoxWidth * 2
Global Const $g_iWinHeight = ($g_iBoxStartY * 2) + ($g_iBoxHeight * $g_iBoxAmount) + ($g_iBoxSpace * $g_iBoxAmount)
Global Const $g_sWinTitle  = 'Example'

Global       $g_hGUI
Global       $g_aID

Main()

Func Main()

    $g_hGUI = GUICreate($g_sWinTitle, $g_iWinWidth, $g_iWinHeight)
    $g_aID  = GUICtrlCreateCheckboxMulti($g_iBoxStartX, $g_iBoxStartY, $g_iBoxWidth, $g_iBoxHeight, $g_iBoxSpace, $g_iBoxAmount)

    GUICtrlSetData($g_aID[$g_iBoxTextEx], $g_sBoxTextEx)
    GUISetState(@SW_SHOW, $g_hGUI)

    While Not (GUIGetMsg() = $GUI_EVENT_CLOSE)

        Sleep($g_iWindDelay)

    WEnd

    Exit
EndFunc

Func GUICtrlCreateCheckboxMulti(Const $iStartX, Const $iStartY, Const $iWidth, Const $iHeight, Const $iSpace, Const $iAmount, Const $sTextTpl = 'Checkbox #%s')
    Local $iYPosCur = 0
    Local $sTextCur = ''
    Local $aID[$iAmount]

    For $i1 = 0 To $iAmount -1

        $iYPosCur = $iStartY + ($iHeight * $i1) + ($iSpace * $i1)
        $sTextCur = StringFormat($sTextTpl, $i1 +1)
        $aID[$i1] = GUICtrlCreateCheckbox($sTextCur, $iStartX, $iYPosCur, $iWidth, $iHeight)

    Next

    Return $aID
EndFunc
  • GUICtrlCreateCheckboxMulti() demonstrates
    • array declaration ($aID[$iAmount])
    • assignment of array elements in a For...To...Step...Next -loop ($aID[$i1] = ...).
  • Main() demonstrates selection of an individual element (changing its text using GUICtrlSetData()).
  • Adjust constants as required ($g_iBoxAmount etc.).


来源:https://stackoverflow.com/questions/7482045/incremental-variable-definition

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!