我正在编写一个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
答案 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