fenhanxue 发表于 2016-9-6 15:07:28

求助帮忙优化代码[已解决]

本帖最后由 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 15:44:30

本帖最后由 afan 于 2016-9-6 16:01 编辑

Case $check To $check

heroxianf 发表于 2016-9-6 15:52:46

经典就是经典,A大在回复我的帖子里提到过。

1361739590 发表于 2016-9-6 15:54:40

本帖最后由 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

haijie1223 发表于 2016-9-6 16:10:34

还是事件模式方便些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

afan 发表于 2016-9-6 16:24:42

还是事件模式方便些
haijie1223 发表于 2016-9-6 16:10 http://www.autoitx.com/images/common/back.gif


    -3另外写会更好...Func GuiEnvent()
        a(@GUI_CtrlId - $check)
EndFunc   ;==>GuiEnvent

1361739590 发表于 2016-9-6 16:33:57

回复 6# afan


    學習了

1361739590 发表于 2016-9-6 16:34:09

回复 5# haijie1223


    學習了

haijie1223 发表于 2016-9-6 19:02:16

回复 6# afan


    请A版指点一下,我一直都是放在一个函数里面。

afan 发表于 2016-9-6 19:11:40

回复 9# haijie1223


    GUISetOnEvent(-3, '_Exit')_ _||

haijie1223 发表于 2016-9-6 19:21:21

回复 10# afan


    。。。afan理解错了,我是想问,为什么要把-3放到另外一个函数里面呢。

afan 发表于 2016-9-6 20:28:47

回复 11# haijie1223


    不觉得便于组织代码提高效率么专属函数无需条件判断了...

haijie1223 发表于 2016-9-6 20:49:54

回复 12# afan


    哦 明白了,多谢指点!

fenhanxue 发表于 2016-9-6 21:52:38

学习良多!太感谢各位啦

mars0916 发表于 2016-9-7 14:31:19

學習了

收藏了
页: [1] 2
查看完整版本: 求助帮忙优化代码[已解决]