在AutoIt中动态创建按钮时的下标尺寸错误

时间:2014-06-27 20:51:36

标签: button autoit

我正在编写一个AutoIt脚本,通过循环遍历按钮定义数组来制作GUI按钮。

这是一个脚本,我将经常添加/删除按钮,所以我认为循环是有意义的。我添加了按钮手柄,按钮文本和函数名称,以将按钮绑定到名为$buttons的数组。按钮参数作为管道分隔字符串保存到$buttons数组的一行。

Func make_buttons()

    local $i = 1
    Local $bHandles[Ubound($buttons)]
    _arraydisplay($bHandles)
    For $button In $buttons
        local $params= StringSplit($button,"|")
        local $top = $i*40
        local $left = 10
        local $width = 100
        Global $bHandles[$i] = GUICtrlCreateButton($params[1],$left,$top,$width)
        GUICtrlSetOnEvent($bHandles[$i],$params[2])

        $i = $i+1
    Next
EndFunc

执行时出现此错误:

  

Global $ params [1] = ^ ERROR   错误:在“Dim”语句中缺少下标维度

任何有助于澄清错误意味着什么的帮助。

更新

@Sachadee在下面的回答让我了解到,在尝试使用变量作为名称时,我一直使用Global关键字将句柄变量声明为GuiCtrlCreateButton()。离开Global关键字帮助我消除了我收到的错误。我的最终按钮创建代码行如下:

Func make_buttons()

    local $i = 1
    For $button In $buttons
        local $params= StringSplit($button,"|")
        local $top = $i*40
        local $left = 10
        local $width = 100
        Global $handle = $params[2] & "_handle"
        $handle = GUICtrlCreateButton($params[1],$left,$top,$width)
        GUICtrlSetOnEvent($handle,$params[2])
        $i = $i+1
    Next
EndFunc

1 个答案:

答案 0 :(得分:0)

编辑:

您正在为[N]元素定义一个数组结构Local $bHandles[Ubound($buttons)]。但是你没有定义这个数组的内容。然后,您尝试使用Global的其他值重新定义它: Global $bHandles[$i] = GUICtrlCreateButton($params[1],$left,$top,$width)

这是一种更好的方法:

#include <GUIConstants.au3>
#include <ButtonConstants.au3>

Global $AllButtons[4] = ["3","Button1","Button2","Bouton3"]

GuiCreate ("Title", 120, 200)
$Btn_Start = GUICtrlCreateDummy()
For $i = 1 To $AllButtons[0]
    local $top = $i*40
    local $left = 10
    local $width = 100
    GUICtrlCreateButton($AllButtons[$i],$left,$top,$width)
Next
$Btn_End = GUICtrlCreateDummy()
GUISetState ()

While 1
    $Msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Btn_Start To $Btn_End
            MsgBox(0, "Test", GUICtrlRead($Msg))
    EndSwitch
 Wend