找回密码
 加入
搜索
查看: 10120|回复: 15

[AU3基础] 数组按钮如何点击事件【已解决】

  [复制链接]
发表于 2014-2-18 16:06:07 | 显示全部楼层 |阅读模式
本帖最后由 872777825 于 2014-2-19 15:38 编辑
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Local $BTXL[5], $XLlist = 1, $XLspaceX = 95, $XLspaceY = 80, $XLbjx = 170, $XLbjy = 35
$Form1 = GUICreate("Form1", 623, 442)
For $i = 0 To UBound($BTXL) - 1
        $BTXL[$i] = GUICtrlCreateButton("yyyy", $XLspaceX * Mod($i, $XLlist) + $XLbjx, $XLspaceY * Floor($i / $XLlist) + $XLbjy, 160, 35)
Next
GUISetState(@SW_SHOW)


While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd


如图  用数组做出来的按钮控件
怎么在点击不同按钮的情况下产生不同事件

如按第一个弹出对话框A   按第二个打开网页.....

还有怎么给每个按钮单独命名


想了好久都没想出来该怎么办  
麻烦各位前辈指点一下  谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-2-18 16:38:05 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Local $BTXL[5], $XLlist = 1, $XLspaceX = 95, $XLspaceY = 80, $XLbjx = 170, $XLbjy = 35
$Form1 = GUICreate("Form1", 623, 442)
For $i = 0 To UBound($BTXL) - 1
        $BTXL[$i] = GUICtrlCreateButton("yyyy", $XLspaceX * Mod($i, $XLlist) + $XLbjx, $XLspaceY * Floor($i / $XLlist) + $XLbjy, 160, 35)
Next
GUISetState(@SW_SHOW)


While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                                Exit
                        Case $BTXL[0]
                                MsgBox(64,"","0")
                        Case $BTXL[1]
                                MsgBox(64,"","1")
                        Case $BTXL[2]
                                MsgBox(64,"","2")
                        Case $BTXL[3]
                                MsgBox(64,"","3")
                        Case $BTXL[4]
                                MsgBox(64,"","4")
        EndSwitch
WEnd
发表于 2014-2-18 16:44:51 | 显示全部楼层
Local $BTXL[5], $XLlist = 1, $XLspaceX = 95, $XLspaceY = 80, $XLbjx = 170, $XLbjy = 35
$Form1 = GUICreate('Form1', 623, 442)
Local $aBtn[5][2] = [['运行notepad'],['bbb'],['c'],['d'],['退出']]
For $i = 0 To UBound($BTXL) - 1
        $aBtn[$i][1] = GUICtrlCreateButton($aBtn[$i][0], $XLspaceX * Mod($i, $XLlist) + $XLbjx, $XLspaceY * Floor($i / $XLlist) + $XLbjy, 160, 35)
Next
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3, $aBtn[4][1]
                        Exit
                Case $aBtn[0][1]
                        Run('notepad.exe')
                Case $aBtn[1][1] To $aBtn[3][1]
                        MsgBox(0, '按钮文本', GUICtrlRead($nMsg))
        EndSwitch
WEnd
发表于 2014-2-18 18:53:33 | 显示全部楼层
事件模式:
Opt('GUIOnEventMode', 1)
Local $XLlist = 1, $XLspaceX = 95, $XLspaceY = 80, $XLbjx = 170, $XLbjy = 35
$Form1 = GUICreate('Form1', 623, 442)
GUISetOnEvent(-3, '_Exit')
Local $aBtn[5] = ['运行notepad', 'b', 'c', 'd', '退出']
For $i = 0 To UBound($BTXL) - 1
        GUICtrlCreateButton($aBtn[$i], $XLspaceX * Mod($i, $XLlist) + $XLbjx, $XLspaceY * Floor($i / $XLlist) + $XLbjy, 160, 35)
        GUICtrlSetOnEvent(-1, '_bt_events')
Next
GUISetState()
While 1
        Sleep(50)
WEnd

Func _Exit()
        GUIDelete($Form1)
        Exit
EndFunc

Func _bt_events()
        Switch GUICtrlRead(@GUI_CtrlId)
                Case '运行notepad'
                        Run('notepad.exe')
                Case 'b'
                        MsgBox(0, '按钮', 'b')
                Case 'c'
                        MsgBox(0, '按钮', 'c')
                Case 'd'
                        MsgBox(0, '按钮', 'd')
                Case Else
                        _Exit()
        EndSwitch
 楼主| 发表于 2014-2-19 15:36:05 | 显示全部楼层
回复 2# palkiller


    谢谢回复  问题解决了
 楼主| 发表于 2014-2-19 15:36:52 | 显示全部楼层
回复 3# afan


    谢谢AFAN版主回复  
   问题解决了  
 楼主| 发表于 2014-2-19 15:37:17 | 显示全部楼层
回复 4# user3000


    谢谢回复  又多学习了一种方法
发表于 2014-2-19 16:09:31 | 显示全部楼层
事件模式:
user3000 发表于 2014-2-18 18:53



    建议使用了变量,其它地方最好直接引用,免得修改起来会比较麻烦,也容易疏漏。
Func _bt_events()
        Switch GUICtrlRead(@GUI_CtrlId)
                Case $aBtn[0]
                        Run('notepad.exe')
                Case $aBtn[1]
                        MsgBox(0, '按钮', $aBtn[1])
                Case $aBtn[2]
                        MsgBox(0, '按钮', $aBtn[2])
                Case $aBtn[3]
                        MsgBox(0, '按钮', $aBtn[3])
                Case $aBtn[4]
                        _Exit()
        EndSwitch
EndFunc
发表于 2014-2-19 18:28:47 | 显示全部楼层
回复 8# afan

是极!
算起来,这3、4个月没怎么码过代码了!估计就这么地慢慢地把以前用过的AU3知识全“清零”了。
发表于 2014-2-19 19:02:33 | 显示全部楼层
回复  afan

是极!
算起来,这3、4个月没怎么码过代码了!估计就这么地慢慢地把以前用过的AU3知识全“ ...
user3000 发表于 2014-2-19 18:28



    肯定不会… 除非不逛这了 ^ ^
 楼主| 发表于 2014-2-20 09:41:59 | 显示全部楼层
本帖最后由 872777825 于 2014-2-20 09:48 编辑

回复 10# afan


afan 版主  我再追加下问个问题
如下图
Local $BTXL[5], $XLlist = 1, $XLspaceX = 60, $XLspaceY = 60, $XLbjx = 170, $XLbjy = 35
Local $BT[5], $list = 1, $spaceX = 60, $spaceY = 60, $bjx = 350, $bjy = 45

$Form1 = GUICreate('Form1', 623, 442)
Local $aBtn[5][2] = [['C],['D'],['E],['F'],['退出']]
Local $aBtnx[5][2] = [['本地磁盘1'],['本地磁盘2'],['本地磁盘3'],['本地磁盘4'],['本地磁盘5']]
For $i = 0 To UBound($BTXL) - 1
        $aBtn[$i][1] = GUICtrlCreateButton($aBtn[$i][0], $XLspaceX * Mod($i, $XLlist) + $XLbjx, $XLspaceY * Floor($i / $XLlist) + $XLbjy, 160, 35)
Next

For $i = 0 To UBound($BT) - 1
        $aBtnx[$i][1] = GUICtrlCreateLabel($aBtnx[$i][0], $spaceX * Mod($i, $list) + $bjx, $spaceY * Floor($i / $list) + $bjy, 160, 35)
Next
GUISetState()

While 1

        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3, $aBtn[4][1]
                        Exit
                Case $aBtn[0][1] To $aBtn[3][1]
                        MsgBox(0, '按钮文本', GUICtrlRead($nMsg))
        EndSwitch
WEnd
怎么才能实现按每个按钮的时候可以在弹出的对话框 显示右边对应的文本内容呢?

当然  Local $aBtnx[5][2] = [['文本1'],['文本2'],['文本3'],['文本4'],['文本5']]  这段文本内容不是特定的  是通过获取计算机信息得到的

例如
Local $aBtn[5][2]  
Local $aBtnx[5][2]  

这个中的5是通过获取得到的硬盘分区数量  $aBtnx 这个变量是分区的卷标名   
那么按没个按钮的时候  就提示相应分区的卷标名

麻烦您再费时指点下小弟   谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-2-20 11:12:42 | 显示全部楼层
本帖最后由 afan 于 2014-2-20 11:13 编辑

回复 11# 872777825


    道理是一样的。而且需要增加的文本并不需要2维数组[5][2],1维数组[5]就可以了,也可以直接加在之前的2维数组中。
Local $BTXL[5], $XLlist = 1, $XLspaceX = 60, $XLspaceY = 60, $XLbjx = 170, $XLbjy = 35
Local $BT[5], $list = 1, $spaceX = 60, $spaceY = 60, $bjx = 350, $bjy = 45

$Form1 = GUICreate('Form1', 623, 442)
Local $aBtn[5][2] = [['C'],['D'],['E'],['F'],['退出']]
Local $aBtnx[5] = ['本地磁盘1', '本地磁盘2', '本地磁盘3', '本地磁盘4', '本地磁盘5']
For $i = 0 To UBound($BTXL) - 1
        $aBtn[$i][1] = GUICtrlCreateButton($aBtn[$i][0], $XLspaceX * Mod($i, $XLlist) + $XLbjx, $XLspaceY * Floor($i / $XLlist) + $XLbjy, 160, 35)
Next
For $i = 0 To UBound($BTXL) - 1
        GUICtrlCreateLabel($aBtnx[$i], $spaceX * Mod($i, $list) + $bjx, $spaceY * Floor($i / $list) + $bjy, 160, 35)
Next
GUISetState()

While 1

        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3 ;;;;, $aBtn[4][1]
                        Exit
                Case $aBtn[0][1] To $aBtn[4][1]
                        MsgBox(0, '右边文本', $aBtnx[$nMsg - $aBtn[0][1]])
                        If $nMsg = $aBtn[4][1] Then Exit
        EndSwitch
WEnd
 楼主| 发表于 2014-2-20 15:01:06 | 显示全部楼层
回复 12# afan


    好像是用 event 函数 做事件的时候无效
While 1

        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3 ;;;;, $aBtn[4][1]
                        Exit
                                        Case $aBtn[0][1] To $aBtn[4][1]
                                                MsgBox(0,0,$nMsg)
                        MsgBox(0, '右边文本', $aBtnx[$nMsg - $aBtn[0][1]])
                        If $nMsg = $aBtn[4][1] Then Exit
        EndSwitch
WEnd
怎么修改成
Func MYGUI_EVENT()
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $aBtn[0][1] To $aBtn[$DRVNUM[0] - 1][1]
                        Case $aBtn[0][1] To $aBtn[4][1]
                                                MsgBox(0,0,$nMsg)
                        MsgBox(0, '右边文本', $aBtnx[$nMsg - $aBtn[0][1]])
                        If $nMsg = $aBtn[4][1] Then Exit

        EndSwitch
EndFunc   ;
 楼主| 发表于 2014-2-20 15:02:05 | 显示全部楼层
回复 13# 872777825


    afan版主 我是不是有点过了  
发表于 2014-2-20 16:38:53 | 显示全部楼层
回复 14# 872777825
Opt('GUIOnEventMode', 1)

Local $BTXL[5], $XLlist = 1, $XLspaceX = 60, $XLspaceY = 60, $XLbjx = 170, $XLbjy = 35
Local $BT[5], $list = 1, $spaceX = 60, $spaceY = 60, $bjx = 350, $bjy = 45

$Form1 = GUICreate('Form1', 623, 442)
GUISetOnEvent(-3, 'MYGUI_EVENT')

Local $aBtn[5][2] = [['C'],['D'],['E'],['F'],['退出']]
Local $aBtnx[5] = ['本地磁盘1', '本地磁盘2', '本地磁盘3', '本地磁盘4', '本地磁盘5']
For $i = 0 To UBound($BTXL) - 1
        $aBtn[$i][1] = GUICtrlCreateButton($aBtn[$i][0], $XLspaceX * Mod($i, $XLlist) + $XLbjx, $XLspaceY * Floor($i / $XLlist) + $XLbjy, 160, 35)
        GUICtrlSetOnEvent(-1, 'MYGUI_EVENT')
Next
For $i = 0 To UBound($BTXL) - 1
        GUICtrlCreateLabel($aBtnx[$i], $spaceX * Mod($i, $list) + $bjx, $spaceY * Floor($i / $list) + $bjy, 160, 35)
Next
GUISetState()

While 1
        Sleep(100)
WEnd

Func _Exit()
        GUIDelete($Form1)
        Exit
EndFunc   ;==>_Exit

Func MYGUI_EVENT()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $aBtn[0][1] To $aBtn[4][1]
                        MsgBox(0, '右边文本', $aBtnx[@GUI_CtrlId - $aBtn[0][1]])
                        If @GUI_CtrlId = $aBtn[4][1] Then Exit

        EndSwitch
EndFunc   ;==>MYGUI_EVENT

评分

参与人数 1金钱 +10 收起 理由
872777825 + 10 谢谢帮忙 非常感谢

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 04:46 , Processed in 0.098357 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表