Visual_Basic 板


LINE

初次发帖... 请各位多多指教 ※ 引述《comduffer ()》之铭言: : 是这样的我要做一个回圈里的回圈 : for i1= 1 to x : for i2= 1 to x : ................ : for i22 = 1 to x : 请问有甚麽办法可以把他精简呢 源由: 多重回圈是可以用阵列及配合其他副程序来完成, 但前几天某时候忽然有被雷打到的感觉! 原本是在想着物件导向应用等问题,可是脑海里不知怎麽的忽然飘过这个问题, 然後... ... ... 回圈...多重回圈...很麻烦... 物件可以组合...可以当元件一样装载... 回圈..物件...回圈....物件..... 装在哪?..装在回圈上?......直接..装在回圈上.....? !?!? 阿对! 这样似乎可行呢! 於是呢,就产生了为原本就存在内建回圈(while)直接加装成多重回圈的想法! 流程: 而for回圈和while回圈只差在一个有针对性而另一个则否, 所以瞜,我们可以针对for回圈功能多出来的部份实作。 单一回圈对比: For回圈: Dim i As Long For i = start_num To end_num ' (程式码...) Next while回圈: Dim i As Long i = start_num Do While start_num <= i And i <= end_num ' (程式码...) i = i + step_num Loop 物件: Dim k As for_loop Set k = New_ForLoop(start_num, end_num, step_num) k.Loop_Initialization '为物件内的成员变数i做初始赋值 Do While k.IsOutLoop = False Dim i As Long i = k.i '(程式码...) k.LoopNext Loop 多重回圈对比: 多重for回圈: For i1 = start_num To end_num For i2 = start_num To end_num ........ For i5 = start_num To end_num '(程式码...) Next i5 ........ Next i2 Next i1 物件: Dim loop_array() As for_loop loop_array = build_ForLoop_array(start_num, end_num, 5) '函数自订 Dim k As mult_ForLoop Set k = New_mult_ForLoop(loop_array) k.Loop_Initialization Do While k.IsEnd = False 'i1, i2, ...,i5对应到loop_array(0).i, loop_array(1).i, ... '(程式码...) k.LoopNext Loop 如此一来,就可以神不知鬼不觉的把while回圈加装成了多重回圈! 模组介绍: Initialization_module: 因为VB6没有像VB.NET有建构函数所以特别增设的模组内容如下: 1. Function New_ForLoop(star_num As Long, end_num As Long, step As Long) As for_loop 2. Function New_mult_ForLoop(loop_array() As for_loop) As mult_ForLoop 物件关系: mult_ForLoop & for_loop类别关系如下: ┌──────┐ │mult_ForLoop│ 注解:多重回圈加装器 └──────┘ ◇ ┌────┐ └───┤for_loop│ 注解:单层回圈加装器 mult_ForLoop └────┘ 使用时 , 需要外加for_loop物件(组合关系) 2010/2/3 符号修正 细节(程式码 & 部分说明): 以下内容是个别针对for_loop及Mult_ForLoop所设的例子。 for_loop物件: 实作使用物件模拟 For回圈 1 + 2 + 3 + ... + 100。 Mult_ForLoop物件: 实作使用物件模拟多重回圈(1与0的重复排列)。 Form1(Form1.frm): 所需控制项: Command1(实作for_loop), Command2(实作Mult_ForLoop), List1。 Option Explicit Private Sub Command1_Click() Dim k As for_loop ' for k = 1 to 100 step 1 Set k = New_ForLoop(1, 100, 1) k.Loop_Initialization List1.Clear Dim sum As Long '============================================= Do While k.IsOutLoop = False sum = sum + k.i List1.AddItem sum k.LoopNext Loop '============================================= MsgBox "1 + 2 + 3 + ... + 100 = " & sum End Sub Private Sub Command2_Click() Dim N As Integer N = InputBox("(0&1重复排列)请输入重复排列之N值") Dim loop_array() As for_loop ReDim loop_array(N - 1) Dim i As Integer For i = 0 To N - 1 'for x = 0 to 1 step 1 Set loop_array(i) = New_ForLoop(0, 1, 1) Next Dim k As mult_ForLoop Set k = New_mult_ForLoop(loop_array) k.Loop_Initialization List1.Clear '============================================ Dim temp_i As Long Do While k.IsEnd = False Dim temp_s As String temp_s = temp_i & "." & vbTab For i = 0 To N - 1 temp_s = temp_s & loop_array(i).i Next List1.AddItem temp_s temp_i = temp_i + 1 k.LoopNext Loop '============================================ MsgBox "共" & List1.ListCount & "个组合" End Sub Initialization_module(Initialization_module.bas): Option Explicit Function New_ForLoop(star_num As Long, end_num As Long, step As Long) As _ for_loop Dim k As New for_loop k.Set_ForLoop star_num, end_num, step Set New_ForLoop = k Set k = Nothing End Function Function New_mult_ForLoop(loop_array() As for_loop) As mult_ForLoop Dim k As New mult_ForLoop k.Set_Mult_For_Loop loop_array Set New_mult_ForLoop = k Set k = Nothing End Function for_loop(for_loop.cls): Option Explicit Dim me_range_left As Long '范围左端值(min) Dim me_range_right As Long '范围右端值(max) Dim me_start As Long '回圈开始值 Dim me_step As Long '回圈步进值 Public i As Long '计数(即时记录回圈的实际状况) Friend Sub Set_ForLoop(start_num As Long, end_num As Long, step As Long) me_start = start_num me_range_left = start_num me_range_right = end_num me_step = step End Sub Public Sub Loop_Initialization() i = me_start End Sub Public Sub LoopNext() i = i + 1 End Sub Public Function IsOutLoop() As Boolean 'IsOutLoop=False '(IsOutLoop预设情况下即为False) If Not (me_range_left <= Me.i And Me.i <= me_range_right) Then IsOutLoop = True End If End Function mult_ForLoop(mult_ForLoop.cls): Option Explicit Dim me_ArrayForLoop() As for_loop Dim me_Loop_count As Long Friend Sub Set_Mult_For_Loop(ArrayForLoop() As for_loop) me_ArrayForLoop = ArrayForLoop me_Loop_count = UBound(me_ArrayForLoop) + 1 End Sub Public Sub Loop_Initialization() Dim i As Long For i = 0 To me_Loop_count - 1 me_ArrayForLoop(i).Loop_Initialization Next End Sub Public Sub LoopNext() Dim i As Long i = me_Loop_count - 1 me_ArrayForLoop(i).LoopNext Do If me_ArrayForLoop(i).IsOutLoop Then i = i - 1 If i = -1 Then Exit Do End If me_ArrayForLoop(i).LoopNext Else i = i + 1 If i = me_Loop_count Then Exit Do End If me_ArrayForLoop(i).Loop_Initialization End If Loop End Sub Public Function IsEnd() As Boolean IsEnd = me_ArrayForLoop(0).IsOutLoop End Function 专案载点:http://w10.loxa.com.tw/s37185622/share/Multiple_for_loop.rar 执行档载点:http://w10.loxa.com.tw/s37185622/share/for_loop.exe 如有任何错误、疑问,欢迎莅临指导! 可延伸部分: 其实在VB.NET中,step部分也可以用"抽象化物件"代替, 亦或者使用"委派"的方式写,应用可以直接替代掉原本的递回, 无论排列、组合都有相对应的写法。 ※ 编辑: s3748679 来自: 218.164.87.209 (02/03 19:26) ※ 编辑: s3748679 来自: 218.164.87.209 (02/03 21:47) ※ 编辑: s3748679 来自: 218.164.87.209 (02/03 21:48) ※ 编辑: s3748679 来自: 218.164.87.209 (02/03 21:52) ※ 编辑: s3748679 来自: 218.164.87.209 (02/03 22:49)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP