872777825 发表于 2014-2-18 16:06:07

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

本帖最后由 872777825 于 2014-2-19 15:38 编辑

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Local $BTXL, $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   按第二个打开网页.....

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


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

palkiller 发表于 2014-2-18 16:38:05

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Local $BTXL, $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
                                MsgBox(64,"","0")
                        Case $BTXL
                                MsgBox(64,"","1")
                        Case $BTXL
                                MsgBox(64,"","2")
                        Case $BTXL
                                MsgBox(64,"","3")
                        Case $BTXL
                                MsgBox(64,"","4")
      EndSwitch
WEnd

afan 发表于 2014-2-18 16:44:51

Local $BTXL, $XLlist = 1, $XLspaceX = 95, $XLspaceY = 80, $XLbjx = 170, $XLbjy = 35
$Form1 = GUICreate('Form1', 623, 442)
Local $aBtn = [['运行notepad'],['bbb'],['c'],['d'],['退出']]
For $i = 0 To UBound($BTXL) - 1
        $aBtn[$i] = GUICtrlCreateButton($aBtn[$i], $XLspaceX * Mod($i, $XLlist) + $XLbjx, $XLspaceY * Floor($i / $XLlist) + $XLbjy, 160, 35)
Next
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3, $aBtn
                        Exit
                Case $aBtn
                        Run('notepad.exe')
                Case $aBtn To $aBtn
                        MsgBox(0, '按钮文本', GUICtrlRead($nMsg))
        EndSwitch
WEnd

user3000 发表于 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 = ['运行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

872777825 发表于 2014-2-19 15:36:05

回复 2# palkiller


    谢谢回复问题解决了

872777825 发表于 2014-2-19 15:36:52

回复 3# afan


    谢谢AFAN版主回复
   问题解决了{:face (316):}

872777825 发表于 2014-2-19 15:37:17

回复 4# user3000


    谢谢回复又多学习了一种方法

afan 发表于 2014-2-19 16:09:31

事件模式:
user3000 发表于 2014-2-18 18:53 http://www.autoitx.com/images/common/back.gif


    建议使用了变量,其它地方最好直接引用,免得修改起来会比较麻烦,也容易疏漏。Func _bt_events()
        Switch GUICtrlRead(@GUI_CtrlId)
                Case $aBtn
                        Run('notepad.exe')
                Case $aBtn
                        MsgBox(0, '按钮', $aBtn)
                Case $aBtn
                        MsgBox(0, '按钮', $aBtn)
                Case $aBtn
                        MsgBox(0, '按钮', $aBtn)
                Case $aBtn
                        _Exit()
        EndSwitch
EndFunc

user3000 发表于 2014-2-19 18:28:47

回复 8# afan

是极!
算起来,这3、4个月没怎么码过代码了!估计就这么地慢慢地把以前用过的AU3知识全“清零”了。

afan 发表于 2014-2-19 19:02:33

回复afan

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


    肯定不会… 除非不逛这了 ^ ^

872777825 发表于 2014-2-20 09:41:59

本帖最后由 872777825 于 2014-2-20 09:48 编辑

回复 10# afan


afan 版主我再追加下问个问题
如下图

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

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

For $i = 0 To UBound($BT) - 1
        $aBtnx[$i] = 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
                        Exit
                Case $aBtn To $aBtn
                        MsgBox(0, '按钮文本', GUICtrlRead($nMsg))
        EndSwitch
WEnd怎么才能实现按每个按钮的时候可以在弹出的对话框 显示右边对应的文本内容呢?

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

例如
Local $aBtn
Local $aBtnx

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

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

afan 发表于 2014-2-20 11:12:42

本帖最后由 afan 于 2014-2-20 11:13 编辑

回复 11# 872777825


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

$Form1 = GUICreate('Form1', 623, 442)
Local $aBtn = [['C'],['D'],['E'],['F'],['退出']]
Local $aBtnx = ['本地磁盘1', '本地磁盘2', '本地磁盘3', '本地磁盘4', '本地磁盘5']
For $i = 0 To UBound($BTXL) - 1
        $aBtn[$i] = GUICtrlCreateButton($aBtn[$i], $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
                        Exit
                Case $aBtn To $aBtn
                        MsgBox(0, '右边文本', $aBtnx[$nMsg - $aBtn])
                        If $nMsg = $aBtn Then Exit
        EndSwitch
WEnd

872777825 发表于 2014-2-20 15:01:06

回复 12# afan


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

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

        EndSwitch
EndFunc   ;

872777825 发表于 2014-2-20 15:02:05

回复 13# 872777825


    afan版主 我是不是有点过了{:face (113):}

afan 发表于 2014-2-20 16:38:53

回复 14# 872777825 Opt('GUIOnEventMode', 1)

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

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

Local $aBtn = [['C'],['D'],['E'],['F'],['退出']]
Local $aBtnx = ['本地磁盘1', '本地磁盘2', '本地磁盘3', '本地磁盘4', '本地磁盘5']
For $i = 0 To UBound($BTXL) - 1
        $aBtn[$i] = GUICtrlCreateButton($aBtn[$i], $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 To $aBtn
                        MsgBox(0, '右边文本', $aBtnx[@GUI_CtrlId - $aBtn])
                        If @GUI_CtrlId = $aBtn Then Exit

        EndSwitch
EndFunc   ;==>MYGUI_EVENT
页: [1] 2
查看完整版本: 数组按钮如何点击事件【已解决】