[已解决]多标签批量创建的按钮如何捕捉消息?
本帖最后由 邪恶海盗 于 2014-9-15 09:40 编辑For $i1 = 1 To $var
GUICtrlCreateTabItem($var[$i1])
GUICtrlCreateButton("按钮1", 20, 40, 160, 50)
GUICtrlCreateButton("按钮2", 20, 40, 160, 50)
Next如题,如何捕捉按钮按下的消息? 补充一下,比如根据配置文件创建的标签页有1-$X($X>0),每个标签页内又有按钮0-8,这样地话按钮就有$Button-$Button[$X],怎么分别捕捉每个按钮的消息呢??? 上全代码,才好分析问题~ 可以详细了解一下 eval 的用途
可 解 你 的 迷 惑 回复 3# austere #include <GUIConstantsEx.au3>
Dim $x = ["一", "二", "三", "四", "五"]
Dim $y = ["11", "21", "31", "41", "51", "61"]
GUICreate("主窗口", 300, 300) ;创建主窗口
GUICtrlCreateTab(0, 0, 300, 300)
For $i1 = 0 To 4
GUICtrlCreateTabItem($x[$i1])
For $i2 = 0 To 5
GUICtrlCreateButton($x[$i1] & $y[$i2], 20, 30 + 40 * $i2, 50, 30)
Next
Next
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
精简之后的... 本帖最后由 shqf 于 2014-9-11 17:40 编辑
GUIGetMsg()会捕捉事件消息的呀,所以剩下的是判断的问题:事件消息是哪个控件产生的?
我想到的方法是一个个case来判断。或者用个循环,里面是用一句case也可以,再一句执行相应的自定义函数。 同意楼上的,用case~~ 回复 6# shqf
试过,没成功,不知道具体该咋写... 根据最后点击按钮的ID做为执行条件· 回复 9# sdc7
关键是怎么判断最后点击的按钮ID... #include <GUIConstantsEx.au3>
Dim $x = ["一", "二", "三", "四", "五"]
Dim $y = ["11", "21", "31", "41", "51", "61"]
Dim $Button
GUICreate("主窗口", 300, 300) ;创建主窗口
GUICtrlCreateTab(0, 0, 300, 300)
For $i1 = 0 To 4
GUICtrlCreateTabItem($x[$i1])
For $i2 = 0 To 5
$Button[$i1][$i2] = GUICtrlCreateButton($x[$i1] & $y[$i2], 20, 30 + 40 * $i2, 50, 30)
Next
Next
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
If $nMsg = $GUI_EVENT_CLOSE Then Exit
For $i1 = 0 To 4
For $i2 = 0 To 5
If $nMsg = $Button[$i1][$i2] Then
MyFun(String($i1) & String($i2))
ExitLoop
EndIf
Next
Next
WEnd
Func MyFun($btnIndex)
Switch $btnIndex
Case "00"
MsgBox(0, "", "你按了 一11 按钮")
Case "01"
MsgBox(0, "", "你按了 一21 按钮")
Case "02"
MsgBox(0, "", "你按了 一31 按钮")
EndSwitch
EndFunc ;==>MyFun 回复 11# shqf
我咋测试只有标签一按钮有效,其它标签页按钮无效??? 回复 11# shqf
把MyFun(String($i1) & String($i2))换成MsgBox(0,0,$i1&"&"&$i2,5)测试成功,我再试试看... 回复 11# shqf
使用方法代入我自己的代码测试成功了,不过我还是想了解一下这段代码 If $nMsg = $GUI_EVENT_CLOSE Then Exit
For $i1 = 0 To 4
For $i2 = 0 To 5
If $nMsg = $Button[$i1][$i2] Then
MyFun(String($i1) & String($i2))
ExitLoop
EndIf
Next
Next与我们平时用的Swich-case-case有什么区别可以解释一下不??? 本帖最后由 shqf 于 2014-9-15 09:12 编辑
GUIGetMsg()是捕获窗口中产生的消息,其返回的“事件”其实是产生消息的控件ID号,所以GUICtrlCreateButton()语句必须要将其返回值也就是ID赋值给变量,这里用数组比较好(11楼的12句),以便后面用来判断产生消息的是哪个控件(11楼的23句)。以上是本程序的关键。11楼的MyFun()自定义函数里我偷懒只写了3 种情况,所以只能响应3个按钮。应该是所有按钮的处理代码都 要列出,所以完整的话要有30个case,你自己完成哈。至于Swich-case-case与If语句无什么大的区别,都是条件选择语句,Swich-case通常用于条件较多时候的判断,它比If语句往往要更清晰。但本例中因为混杂了循环语句(11楼的20-28句),用case不行,所以改用if。
页:
[1]
2