如何批量地规则地创建同一类GUI控件?
当开始接触到GUI编程后, 新手朋友们慢慢地就会碰到此类问题:是否能批量地创建某一种控件呢?比如, 我要创建10 个按钮控件, 如果是一个一个创建, 敲代码不是问题, 排列及调整按钮位置才是最大的问题!
答案是肯定的.
有两种方法可达到目的: 1, 用数组. 优点是易于理解, 引用控件变量名方便. 缺点是: 如果控件数目未知, 数组下标则不能确定, 必须正确处理保证数组下标不越界!
2, 用Assign函数. 优点是不用特意去计算控件数目. 缺点是引用控件变量名麻烦, 代码不易理解.
具体看下面示例吧.
Opt('guioneventmode', 1)
$form = GUICreate('两种批量创建按钮的方式', 300, 250)
GUISetOnEvent(-3, '_exit')
Local $button
For $j = 0 To 4
$button[$j] = GUICtrlCreateButton('按钮' & $j+1, 45, 25+$j*45, 75, 28)
GUICtrlSetOnEvent(-1, '_clicks')
Next
For $j = 1 To 5
Assign('button' & $j, GUICtrlCreateButton('按钮' & $j+5, 175, 25+($j-1)*45, 75, 28))
GUICtrlSetOnEvent(-1, '_clicks')
Next
GUISetState()
While 1
Sleep(100)
WEnd
Func _exit()
Exit
EndFunc
Func _clicks()
Local $t = GUICtrlRead(@GUI_CtrlId)
Local $var = ''
For $i = 0 To 4
If $button[$i] = @GUI_CtrlId Then $var = '$button[' & $i & ']'
If Eval('button' & $i+1) = @GUI_CtrlId Then $var = '$button' & $i+1
Next
MsgBox(0, '按钮点击测试', '按钮ID:' & @TAB & @GUI_CtrlId & @CR &'按钮变量名:' & @TAB & $var & @CR & '按钮名称:' &@TAB & $t, '', $form)
EndFunc
有别的见解或问题请跟帖交流, 谢谢! Global $aButNum ;按钮总数
Global $iNumber = 5 ;每行按钮数量
Global $iSpacingX = 50, $iSpacingY = 50 ;垂直、水平,间距
Opt('GUIOnEventMode', 1)
GUICreate('循环创建按钮', 300, 300)
GUISetOnEvent(-3, '_ButtonEvents')
For $i = 0 To UBound($aButNum) - 1
$aButNum[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 25, $iSpacingY * Floor($i / $iNumber) + 25, 50, 50)
GUICtrlSetOnEvent(-1, '_ButtonEvents')
Next
GUISetState()
While 1
Sleep(250)
WEnd
Func _ButtonEvents()
Switch @GUI_CtrlId
Case -3
Exit
Case $aButNum To $aButNum
MsgBox(0, '', '按钮 - ' & @GUI_CtrlId - 2)
EndSwitch
EndFunc ;==>_ButtonEvents 回复 1# user3000
我认为这样理解更加妥当!
Global $aButNum ;按钮总数
Global $iNumber = 5 ;每行按钮数量
Global $iSpacingX = 50, $iSpacingY = 50 ;垂直、水平,间距
Opt('GUIOnEventMode', 1)
GUICreate('循环创建按钮', 300, 300)
GUISetOnEvent(-3, '_ButtonEvents')
For $i = 0 To UBound($aButNum) - 1
$aButNum[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 25, $iSpacingY * Floor($i / $iNumber) + 25, 50, 50)
GUICtrlSetOnEvent(-1, '_ButtonEvents')
Next
GUISetState()
While 1
Sleep(250)
WEnd
Func _ButtonEvents()
Switch @GUI_CtrlId
Case -3
Exit
Case $aButNum To $aButNum
MsgBox(0, '', '按钮 - ' & @GUI_CtrlId - $aButNum + 1)
EndSwitch
EndFunc ;==>_ButtonEvents 看看 受教学习了 没输出过GUI_CtrlId的值,估计第一个控件ID是3
关闭是-3,估计最大化是-2,最小化是-1,没试过
@GUI_CtrlId - $aButNum + 1比@GUI_CtrlId -2好 嗯,学习。。。
@GUI_CtrlId要在OnEvent模式下才有。
用msgbox看看,果然第一个控件ID就是3,然后依次递增。
@GUI_CtrlId - $aButNum + 1 很容易理解了。 多谢无私奉献,向高手学习 雷锋精神传天下!谢谢分享! 厉害啊,不服不行啊 看看 受教学习了 http://www.autoitx.com/thread-5729-1-1.html 谢谢楼主了。 看得我懵懵懂懂的 初学者
现在只能收藏研究
谢谢给位老师
页:
[1]