xms77 发表于 2011-9-19 23:07:18

按钮数组如何触发按钮点击事件【已解决】

本帖最后由 xms77 于 2011-9-20 16:48 编辑

我在一个GUI窗体上创建了几十个按钮,我给按钮编了一个数组,但是不知道如何来触发按钮的点击事件,难道需要一个一个按钮来写几乎相同的点击事件吗?有没有高效的方法?

风行者 发表于 2011-9-20 03:10:11

既然是数组就可以用循环注册事件

xms77 发表于 2011-9-20 09:51:24

回复 2# 风行者
兄弟你真行,这么晚还不睡觉!能不能给个例子给我研究一下,谢谢了!

afan 发表于 2011-9-20 13:19:39

以前发过此类帖子,搜不到了,可能忘了加by afan 了,^ *Opt('GUIOnEventMode', 1) ;----事件模式

GUICreate('批量生成按钮及响应 By Afan', 380, 270)
GUISetOnEvent(-3, '_zx')
Local $_c = 10
Local $aBInfo[$_c + 1] = [[$_c]]
For $i = 1 To $_c
        $aBInfo[$i] = '按钮' & $i
        $aBInfo[$i] = '按钮' & $i & '的任务'
Next
Local $Button[$aBInfo]
For $x = 1 To $_c
        $Button[$x - 1] = GUICtrlCreateButton($aBInfo[$x], 16 + 175 * ($x - (Int(($x - 1) / 2) * 2 + 1)), 36 + 35 * Int(($x - 1) / 2), 170, 21)
        GUICtrlSetOnEvent(-1, '_zx')
Next

GUISetState()

While 1
        Sleep(100)
WEnd

Func _zx()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $Button To $Button[$_c - 1]
                        MsgBox(0, 0, $aBInfo[@GUI_CtrlId - 2])

        EndSwitch
EndFunc   ;==>_zx

xms77 发表于 2011-9-20 15:21:36

回复 4# afan
感谢Afan大大,研究一下你的代码。不知道循环消息模式有没有可能实现?

afan 发表于 2011-9-20 15:37:10

回复 5# xms77


    一样的思路,我习惯用事件模式而已GUICreate('批量生成按钮及响应', 380, 270)
Local $_c = 10
Local $aBInfo[$_c + 1] = [[$_c]]
For $i = 1 To $_c
        $aBInfo[$i] = '按钮' & $i
        $aBInfo[$i] = '按钮' & $i & '的任务'
Next
Local $Button[$aBInfo]
For $x = 1 To $_c
        $Button[$x - 1] = GUICtrlCreateButton($aBInfo[$x], 16 + 175 * ($x - (Int(($x - 1) / 2) * 2 + 1)), 36 + 35 * Int(($x - 1) / 2), 170, 21)
Next

GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $Button To $Button[$_c - 1]
                        MsgBox(0, 0, $aBInfo[$nMsg - 2])
        EndSwitch
WEnd

gzh888666 发表于 2011-9-20 16:25:15

回复 6# afan

事件模式才是正道呀!死循环的都是浮云!顶你!

xms77 发表于 2011-9-20 16:45:31

本帖最后由 xms77 于 2011-9-20 16:56 编辑

回复 7# gzh888666
呵呵,原来一直用消息模式,顺手了,现在试试时间模式,学习,练习,实践出真知,感谢afan,总算用事件模式解决了

xms77 发表于 2011-9-20 16:47:57

借用afan的代码总算搞定了,感谢afan,论坛由你而精彩GUISetState()

UDPStartup()
$socket = UDPBind(@IPAddress1, 65532)
If @error <> 0 Then
        MsgBox(0,"Error", "Server port open error")
        $Server_open = 0
EndIf
While 1
        ;If $Server_open <> 0 Then
                $data = UDPRecv($socket, 128,1)
                If $data <> "" Then
                        $data = BinaryToString($data,4)
                        $Data_array = StringSplit($data,"|")
                        ;_ArrayDisplay($Data_array)
                        $Number = StringRight($Data_array,2)
                        $Number = $Number - 20
                        GUICtrlSetData($CellID[$Number],$Data_array)
                        GUICtrlSetData($Product[$Number],$Data_array)
                        GUICtrlSetImage($pic[$Number], "C:\windows\online.jpg")
                        GUICtrlSetData($IP[$Number],$Data_array)
                        ;GUICtrlSetColor($IP[$Number],"0x00ff00")
                EndIf
        ;EndIf
        Sleep(100)
WEnd       

Func _zx()
      Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $Mc_ID To $Mc_ID
                  $GetIp = GUICtrlRead($IP[@GUI_CtrlId-8])
                                        StringRegExp($GetIp,"\d{2}\.\d{2}\.\d{2,3}\.\d{2,3}", 1)
                                        If @error <> 1 Then_RunVnc($GetIp)                                       
      EndSwitch
EndFunc   ;==>_zx
       
       
;=== Run VNC and auto logon remote PC ====================================================
Func _RunVNC($iIP)
        Run("C:\Program Files\RealVNC\VNC4\vncviewer.exe")
        WinWait("VNC Viewer : Connection Details")
        WinActivate("VNC Viewer : Connection Details")
        WinWaitActive("VNC Viewer : Connection Details")
        ControlSetText("VNC Viewer : Connection Details","","Edit1",$iIP)
        ControlClick("VNC Viewer : Connection Details", "OK", "Button3")
        WinWait("VNC Viewer : Authentication ")
        WinActivate("VNC Viewer : Authentication ")
        WinWaitActive("VNC Viewer : Authentication ")
        ControlSetText("VNC Viewer : Authentication ","","Edit2","123")
        ControlClick("VNC Viewer : Authentication ", "OK", "Button1")
EndFunc    ;==> _RunVnc

紫色风林 发表于 2011-9-20 17:09:34

谢谢,学习了

xms77 发表于 2011-9-21 09:40:22

回复 10# 紫色风林
不用谢,我也是刚刚开始学习!共勉吧!

xms77 发表于 2011-9-21 09:42:13

回复 6# afan
原来不知道case 里面也可以用xxx to xxx语句的,现在知道了,感谢!

wua0550 发表于 2011-10-5 01:03:47

学习了~~谢谢

jj119120 发表于 2011-10-10 20:52:31

留个脚印方便查询   数组按钮

wpig 发表于 2011-10-11 14:30:21

过来学习了~~
页: [1] 2
查看完整版本: 按钮数组如何触发按钮点击事件【已解决】