求助帮忙优化代码[已解决]
本帖最后由 fenhanxue 于 2016-9-6 21:54 编辑#include <Inet.au3>
#Include <String.au3>
#include <Math.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <array.au3>
#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>
#include <WinAPIEx.au3>
#include <Array.au3>
Global $array = ['学号','姓名','年龄','成绩'];
#cs 说明:
数组 $array 的维度及对应的文本 为自定义, 即我每次使用程序的时候,都有可能调整这些参数,并且我是不确定下次写的时候,会把这个数组的维度调整为多少,例如
我可能会改成 $array = ['aaa','saasd','ddd']
可能会改成 $array = ['aaa','saasd','ddd','ddd','ddd','d6dd','ddd7','ddd8']
可能会改成 $array = ['aaa','saasd']
。。。等等
#ce
Global $check
$hGUI = GUICreate("测试", 1558, 511, 18, 158)
For $i = 1 To UBound($array)
$check[$i-1] = GUICtrlCreateCheckbox($array[$i-1],20 + 50*$i,414,50,12)
Next
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $check
a(0)
Case $check
a(1)
Case $check
a(2)
Case $check
a(3)
EndSwitch
WEnd
Func a($x)
;.......本部分代码略
EndFunc
求教图中红色框框2 的部分如何优化,
我想实现的功能是,每次我修改程序的时候,我只修改红色框框1 这里的参数,2这里就会有对应的功能,
我现在的代码,当我修改框框1的时候,必须把框框2的代码也跟着一起修改,即:
我现在的代码,每次我修改了$array,框框2部分的代码也必须跟着一起修改,当程序大了之后,感觉很冗余
;例如框框1改成
Global $array = ['学号','姓名'];
;框框2必须跟着这样改
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $check
a(0)
Case $check
a(1)
EndSwitch
WEnd
;例如框框1改成
Global $array = ['学号','姓名','aaa'];
;框框2必须跟着这样改
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $check
a(0)
Case $check
a(1)
Case $check
a(2)
EndSwitch
WEnd
;又例如框框1改成
Global $array = ['学号','姓名','aaa','11','22','333'];
;框框2必须跟着这样改
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $check
a(0)
Case $check
a(1)
Case $check
a(2)
Case $check
a(3)
Case $check
a(4)
Case $check
a(5)
EndSwitch
WEnd
这样的效率太低了,所以想请教,有没办法把2这个部分的代码优化一下,每次只改1不用改2,但2也能实现上述的功能。语文不好,希望各位能理解我想表达的意思。。。 本帖最后由 afan 于 2016-9-6 16:01 编辑
Case $check To $check 经典就是经典,A大在回复我的帖子里提到过。 本帖最后由 1361739590 于 2016-9-6 15:57 编辑
回复 12# ipmitool
參考afan的試試看。
;$check對應 0
;$check對應 1
;$check對應 n
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $check To $check+UBOund($check) - 1
a($msg-$check)
EndSwitch
还是事件模式方便些Opt('GUIOnEventMode', 1)
Global $array = ['学号', '姓名', '年龄', '成绩'];
Global $check
$hGUI = GUICreate("测试", 300, 100)
For $i = 1 To UBound($array)
$check[$i - 1] = GUICtrlCreateCheckbox($array[$i - 1], 50 * $i, 30, 50, 12)
GUICtrlSetOnEvent(-1, 'GuiEnvent')
Next
GUISetState()
GUISetOnEvent(-3, 'GuiEnvent')
While 1
Sleep(100)
WEnd
Func GuiEnvent()
Switch @GUI_CtrlId
Case -3
Exit
Case $check To $check
a(@GUI_CtrlId - $check)
EndSwitch
EndFunc ;==>GuiEnvent
Func a($x)
ConsoleWrite($x & @CRLF)
EndFunc ;==>a 还是事件模式方便些
haijie1223 发表于 2016-9-6 16:10 http://www.autoitx.com/images/common/back.gif
-3另外写会更好...Func GuiEnvent()
a(@GUI_CtrlId - $check)
EndFunc ;==>GuiEnvent 回复 6# afan
學習了 回复 5# haijie1223
學習了 回复 6# afan
请A版指点一下,我一直都是放在一个函数里面。 回复 9# haijie1223
GUISetOnEvent(-3, '_Exit')_ _|| 回复 10# afan
。。。afan理解错了,我是想问,为什么要把-3放到另外一个函数里面呢。 回复 11# haijie1223
不觉得便于组织代码提高效率么专属函数无需条件判断了... 回复 12# afan
哦 明白了,多谢指点! 学习良多!太感谢各位啦 學習了
收藏了
页:
[1]
2