AutoIt Global Scope 问题
编程中发现了一个全局作用域的问题,全局变量在 While...WEnd 中不能正常进行递增,只能获取进入循环前的值。
1 ; FILENAME VariableScope01.au3
2 ; PURPOSE: 全局变量作用域问题
3 ; CREATED BY: @kysnail at home
4 ; NOTE:
5 ; 这里定义了全局变量 $row ,但 While...WEnd 循环中如果不添加 $row = $row + 1,始终会停留在一行上进行刷新。
6 ;
7 ; RESOURCE:
8 ;
9 ;
10 ; Press Esc to terminate script, Pause/Break to "pause"
11
12 #include <Excel.au3>
13 #include <GUIConstantsEx.au3>
14 #include <GUIConstants.au3>
15
16 ; 设置热键 -> Win + o
17 HotKeySet("#o", "NextRecord")
18
19 Global $row = 2
20 Global $oExcel = _ExcelBookNew() ;新建工作表
21 _ExcelWriteCell($oExcel, "序号", 1, 1)
22
23 #Region ### START GUI section ###
24 $Form1 = GUICreate("开始录入", 150, 80, -1, -1)
25 Global $Bon1 = GUICtrlCreateButton("下一组", 30, 24, 97, 33, 0)
26
27 GUISetState(@SW_SHOW)
28 #EndRegion ### END GUI section ###
29
30 While 1
31 $nMsg = GUIGetMsg()
32
33 Switch $nMsg
34 Case $GUI_EVENT_CLOSE
35 Exit
36 Case $Bon1
37 NextRecord($row)
38 ;$row = $row + 1
39 MsgBox(0, "$row value", "$row value = " & $row)
40 EndSwitch
41 WEnd
42
43 Func NextRecord($row)
44 _ExcelWriteCell($oExcel, $row-1, $row, 1)
45 $row = $row + 1
46 ;MsgBox(0, "-----------" & $row, "----------------------------")
47 EndFunc
运行分析
1. 点击运行
2. 第二次点击
3. 第三次点击
4. 第四次点击
5. 这次使用快捷键 "win + o" ,则可以正常运行。
如果想要正确的运行,需要修改如下代码:
1 While 1
2 $nMsg = GUIGetMsg()
3
4 Switch $nMsg
5 Case $GUI_EVENT_CLOSE
6 Exit
7 Case $Bon1
8 NextRecord($row)
9 $row = $row + 1
10 MsgBox(0, "$row value", "$row value = " & $row)
11 EndSwitch
12 WEnd
这样才能保证,再点击按钮时,也能够争取的获取/修改全局变量 $row 的值。