找回密码  加入

AUTOIT CN

搜索
查看: 142|回复: 9

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

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


源码看附件。

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

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

本帖子中包含更多资源

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

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

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

本帖子中包含更多资源

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

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

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

  8. GUISetState(@SW_SHOW)

  9. While 1
  10.         $nMsg = GUIGetMsg()
  11.         Switch $nMsg
  12.                 Case $GUI_EVENT_CLOSE
  13.                         Exit

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

  16.                 Case $b[0] To $b[$Num - 1]
  17.                         MsgBox(0, 0, '按钮b' & $nMsg)
  18.         EndSwitch
  19. 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放入 ...
  1. #include <GUIConstants.au3>
  2. Global $Row = 8, $Col = 3, $a[$Row], $b[$Row], $c[$Row], $d[$Row], $e[$Row], $f[$Row], $ButtonArray[$Row][$Col]
  3. $MyForm = GUICreate('', 400, 350)
  4. For $i = 0 To $Row - 1
  5.         $a[$i] = GUICtrlCreateButton('A - ' & $i + 1, 10, 45 + $i * 24, 40, 22)
  6.         $ButtonArray[$i][0] = $a[$i]
  7.         $d[$i] = GUICtrlCreateButton(Random(1, 1000, 1), 60, 45 + $i * 24, 40, 22)        ;扰乱
  8.         $b[$i] = GUICtrlCreateButton('B - ' & $i + 1, 110, 45 + $i * 24, 40, 22)
  9.         $ButtonArray[$i][1] = $b[$i]
  10.         $e[$i] = GUICtrlCreateButton(Random(1, 1000, 1), 160, 45 + $i * 24, 40, 22)        ;扰乱
  11.         $c[$i] = GUICtrlCreateButton('C - ' & $i + 1, 210, 45 + $i * 24, 40, 22)
  12.         $ButtonArray[$i][2] = $c[$i]
  13.         $f[$i] = GUICtrlCreateButton(Random(1, 1000, 1), 260, 45 + $i * 24, 40, 22)        ;扰乱
  14. Next
  15. GUISetState(@SW_SHOW)

  16. While 1
  17.         $nMsg = GUIGetMsg()
  18.         Switch $nMsg
  19.                 Case $GUI_EVENT_CLOSE
  20.                         Exit
  21.                 Case $ButtonArray[0][0] To $ButtonArray[$Row - 1][$Col - 1]
  22.                         ArraySearch($nMsg)
  23.         EndSwitch
  24. WEnd

  25. Func ArraySearch($nMsg)
  26.         For $i = 0 To $Row - 1
  27.                 For $j = 0 To $Col - 1
  28.                         If $ButtonArray[$i][$j] = $nMsg Then
  29.                                 ButtonArrayBase($i, $j)
  30.                         EndIf
  31.                 Next
  32.         Next
  33. EndFunc   ;==>ArraySearch

  34. Func ButtonArrayBase($Row, $Col)
  35.         Switch $Col
  36.                 Case 0 ;A列
  37.                         MsgBox('控件ID:' & $ButtonArray[$Row][$Col], 0, '第六列数字为:' & GUICtrlRead($ButtonArray[$Row][$Col] + 5))
  38.                 Case 1 ;B列
  39.                         MsgBox('控件ID:' & $ButtonArray[$Row][$Col], 0, '第四列数字为:' & GUICtrlRead($ButtonArray[$Row][$Col] + 1))
  40.                 Case 2 ;C列
  41.                         MsgBox('控件ID:' & $ButtonArray[$Row][$Col], 0, '第二列数字为:' & GUICtrlRead($ButtonArray[$Row][$Col] - 3))
  42.         EndSwitch
  43. EndFunc   ;==>ButtonArrayBase
复制代码


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

本版积分规则

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

GMT+8, 2018-12-15 09:00 , Processed in 0.089733 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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