Button 在AutoIt中动态创建按钮时出现下标标注错误

Button 在AutoIt中动态创建按钮时出现下标标注错误,button,autoit,Button,Autoit,我正在编写一个AutoIt脚本,通过循环遍历按钮定义数组来生成GUI按钮 这是一个脚本,我会经常在其中添加/删除按钮,所以我认为循环是有意义的。我添加按钮句柄、按钮文本和函数名,将按钮绑定到名为$buttons的数组中。按钮参数作为管道分隔字符串保存到$buttons数组的一行中 Func make_buttons() local $i = 1 Local $bHandles[Ubound($buttons)] _arraydisplay($bHandles)

我正在编写一个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
我在执行时遇到以下错误:

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

任何澄清错误含义的帮助都将不胜感激

更新

@Sachadee下面的回答让我明白了一个事实,那就是我在尝试使用变量作为名称时,一直在使用
Global
关键字将句柄变量声明为
GuiCtrlCreateButton()
。省略全局关键字帮助我消除了收到的错误。我最后的按钮创建代码行如下:

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
编辑:

您正在定义一个带有[N]元素位置的数组结构
Local$bHandles[Ubound($buttons)]
。但您没有定义此数组的内容。然后你试图用另一个值来重新定义它
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
#包括
#包括
全局$AllButtons[4]=[“3”、“Button1”、“Button2”、“Bouton3”]
GuiCreate(“标题”,120200)
$Btn_Start=GUICtrlCreateDummy()
对于$i=1到$AllButtons[0]
本地$top=$i*40
本地$left=10
本地$width=100
GUICtrlCreateButton($AllButtons[$i],$left,$top,$width)
下一个
$Btn_End=GUICtrlCreateDummy()
GuiseState()
而1
$Msg=GUIGetMsg()
开关$msg
案例$GUI\u事件\u结束
出口
案例$Btn\u开始到$Btn\u结束
MsgBox(0,“测试”,GUICtrlRead($Msg))
终端开关
温德

为什么这是更好的方法?你能澄清我发布的错误消息吗?您的建议忽略了在我的OP中解析的按钮信息数组。这里使用数组
$allButtons
模拟按钮数组。你可以用你的数组替换它,它会工作的。