找回密码
 加入
搜索
查看: 2008|回复: 9

[网络通信] [已解决]Switch case 数组出错找不到原因

[复制链接]
发表于 2018-12-7 01:37:05 | 显示全部楼层 |阅读模式
本帖最后由 3131210 于 2018-12-7 12:33 编辑


源码看附件。

遇到的问题如下:
1.账号1-7的启动按钮全部失效
2.在账号8的账号密码框随便输入 然后账号8打勾,也会执行【启动】按钮代码里面的功能

实在找不出问题的原因了,还是说case不能这样用吗?

本帖子中包含更多资源

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

×
 楼主| 发表于 2018-12-7 01:39:49 | 显示全部楼层

把上面红 紫框内的代码换成这样 执行就没问题了,可以告诉下是什么原因吗

本帖子中包含更多资源

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

×
 楼主| 发表于 2018-12-7 01:42:41 | 显示全部楼层
本帖最后由 3131210 于 2018-12-7 01:44 编辑
#include <GUIConstants.au3>
Global $Num = 8, $a[$Num], $b[$Num]
$MyForm = GUICreate('', 400, 350)

For $i = 0 To $Num - 1
        $a[$i] = GUICtrlCreateButton('按钮A' & $i, 100, 45 + $i * 24, 50, 22)
        $b[$i] = GUICtrlCreateButton('按钮B' & $i, 200, 45 + $i * 24, 50, 22)
Next

GUISetState(@SW_SHOW)

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

                Case $a[0] To $a[$Num - 1]
                        MsgBox(0, 0, '按钮a' & $nMsg)

                Case $b[0] To $b[$Num - 1]
                        MsgBox(0, 0, '按钮b' & $nMsg)
        EndSwitch
WEnd

这里的代码 也是有问题
 楼主| 发表于 2018-12-7 01:55:53 | 显示全部楼层
是不是创建的控件ID必须连续这样才不会出错
如果不连续,有没有办法
发表于 2018-12-7 08:50:44 | 显示全部楼层
定义一个数组,创建控件的同时将控件ID写入二维数组,相同功能的控件ID写入同一列,比如所有的checkbox放入第一列,所有的button放入第二列,在case someone to someone 时,使用__ArraySearch搜索数组,根据结果确定执行功能。

不明白,可以看http://www.autoit3.cn/thread-55890-1-1.html
发表于 2018-12-7 11:18:47 | 显示全部楼层
也可以分开创建,就没这些问题了
Global $Num = 8, $aA[$Num], $aB[$Num]
$MyForm = GUICreate('', 400, 350)

For $i = 0 To $Num - 1
        $aA[$i] = GUICtrlCreateButton('按钮A' & $i, 100, 45 + $i * 24, 50, 22)
Next
For $i = 0 To $Num - 1
        $aB[$i] = GUICtrlCreateButton('按钮B' & $i, 200, 45 + $i * 24, 50, 22)
Next

GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit

                Case $aA[0] To $aA[$Num - 1]
                        MsgBox(0, 0, '按钮A' & $nMsg - $aA[0])

                Case $aB[0] To $aB[$Num - 1]
                        MsgBox(0, 0, '按钮B' & $nMsg - $aB[0])
        EndSwitch
WEnd

点评

这个也可以 就是跟我在4楼说的一样 创建的时候 ID必须连续 没问题了  发表于 2018-12-7 12:32
 楼主| 发表于 2018-12-7 14:20:52 | 显示全部楼层
tubaba 发表于 2018-12-7 08:50
定义一个数组,创建控件的同时将控件ID写入二维数组,相同功能的控件ID写入同一列,比如所有的checkbox放入 ...
#include <GUIConstants.au3>
Global $Row = 8, $Col = 3, $a[$Row], $b[$Row], $c[$Row], $d[$Row], $e[$Row], $f[$Row], $ButtonArray[$Row][$Col]
$MyForm = GUICreate('', 400, 350)
For $i = 0 To $Row - 1
        $a[$i] = GUICtrlCreateButton('A - ' & $i + 1, 10, 45 + $i * 24, 40, 22)
        $ButtonArray[$i][0] = $a[$i]
        $d[$i] = GUICtrlCreateButton(Random(1, 1000, 1), 60, 45 + $i * 24, 40, 22)        ;扰乱
        $b[$i] = GUICtrlCreateButton('B - ' & $i + 1, 110, 45 + $i * 24, 40, 22)
        $ButtonArray[$i][1] = $b[$i]
        $e[$i] = GUICtrlCreateButton(Random(1, 1000, 1), 160, 45 + $i * 24, 40, 22)        ;扰乱
        $c[$i] = GUICtrlCreateButton('C - ' & $i + 1, 210, 45 + $i * 24, 40, 22)
        $ButtonArray[$i][2] = $c[$i]
        $f[$i] = GUICtrlCreateButton(Random(1, 1000, 1), 260, 45 + $i * 24, 40, 22)        ;扰乱
Next
GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $ButtonArray[0][0] To $ButtonArray[$Row - 1][$Col - 1]
                        ArraySearch($nMsg)
        EndSwitch
WEnd

Func ArraySearch($nMsg)
        For $i = 0 To $Row - 1
                For $j = 0 To $Col - 1
                        If $ButtonArray[$i][$j] = $nMsg Then
                                ButtonArrayBase($i, $j)
                        EndIf
                Next
        Next
EndFunc   ;==>ArraySearch

Func ButtonArrayBase($Row, $Col)
        Switch $Col
                Case 0 ;A列
                        MsgBox('控件ID:' & $ButtonArray[$Row][$Col], 0, '第六列数字为:' & GUICtrlRead($ButtonArray[$Row][$Col] + 5))
                Case 1 ;B列
                        MsgBox('控件ID:' & $ButtonArray[$Row][$Col], 0, '第四列数字为:' & GUICtrlRead($ButtonArray[$Row][$Col] + 1))
                Case 2 ;C列
                        MsgBox('控件ID:' & $ButtonArray[$Row][$Col], 0, '第二列数字为:' & GUICtrlRead($ButtonArray[$Row][$Col] - 3))
        EndSwitch
EndFunc   ;==>ButtonArrayBase

看了,很好   问题解决了
发表于 2018-12-7 15:12:49 | 显示全部楼层
楼主模拟器是用什么识别?大漠吗?还是抓点
 楼主| 发表于 2018-12-7 15:49:40 | 显示全部楼层
为什么会想到模拟器?玩暗黑2的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-26 16:35 , Processed in 0.076873 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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