3131210 发表于 2018-12-7 01:37:05

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

本帖最后由 3131210 于 2018-12-7 12:33 编辑


源码看附件。

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

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

3131210 发表于 2018-12-7 01:39:49


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

3131210 发表于 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 To $a[$Num - 1]
                        MsgBox(0, 0, '按钮a' & $nMsg)

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


这里的代码 也是有问题

3131210 发表于 2018-12-7 01:55:53

是不是创建的控件ID必须连续这样才不会出错
如果不连续,有没有办法

tubaba 发表于 2018-12-7 08:50:44

定义一个数组,创建控件的同时将控件ID写入二维数组,相同功能的控件ID写入同一列,比如所有的checkbox放入第一列,所有的button放入第二列,在case someone to someone 时,使用__ArraySearch搜索数组,根据结果确定执行功能。

不明白,可以看http://www.autoit3.cn/thread-55890-1-1.html

afan 发表于 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 To $aA[$Num - 1]
                        MsgBox(0, 0, '按钮A' & $nMsg - $aA)

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

3131210 发表于 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] = $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] = $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] = $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 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


看了,很好   问题解决了

heavenm 发表于 2018-12-7 15:12:49

楼主模拟器是用什么识别?大漠吗?还是抓点

3131210 发表于 2018-12-7 15:49:40

为什么会想到模拟器?玩暗黑2的
页: [1]
查看完整版本: [已解决]Switch case 数组出错找不到原因