vb控制结构概述

循环结构
循环结构允许重复执行一行或数行代码。Visual Basic支持的循环结构有:
1.Do...Loop
2.For...Next
3.For Each...Next

Do...Loop
用Do 循环重复执行一语句块,且重复次数不定。Do...Loop 语句有几种演变形式,但每种都计算数值条件以决定是否继续执行。如同 If...Thencondition 必须是一个数值或者值为 True(非零)或 False(零)的表达式。在下面的Do...Loop 循环中,只要condition 为True就执行statements。
Do While condition
statements

Loop
当Visual Basic 执行这个Do循环时会首先测试condition。如果condition为False(零),则跳过所有语句。如果condition 为True(非零),则 VisualBasic执行语句,然后退回到Do While语句再测试条件。
因此,只要condition为True 或非零,循环可以随意执行多少次。如果condition 一开始便为False,则不会执行语句。例如,以下过程将计算某一目标字符串在另一字符串中出现的次数,只要发现目标串就执行循环:
Function CountStrings (longstring, target)
Dim position, count
position = 1
Do While InStr (position, longstring, target)
position = InStr(position, longstring, target)_
+ 1
count = count + 1
Loop
CountStrings = count
End Function
如果目标字符串未出现在另一个字符串中,则InStr 返回 0,而且不再执行循环。
Do...Loop 语句的另一种演变形式是先执行语句,然后在每次执行后测试condition。这种形式保证statements 至少执行一次:
Do
statements
Loop While condition
其它两种演变形式类似于前两个,所不同的是,只要condition 为False 而不是True,它们就执行循环。

For...Next000
在不知道循环内需要执行多少次语句时,宜用 Do 循环。但是,在知道要执行多少次时,则最好使用 For...Next 循环。与 Do 循环不同, For 循环使用一个叫做计数器的变量,每重复一次循环之后,计数器变量的值就会增加或者减少。For 循环的语法如下:
For counter = start To end [Step increment]
statements
Next [counter]
参数 Counter、Start、end 和 increment 都是数值型的。
注意 increment 参数可正可负。如果 increment 为正,则 Start 必须小于等于end,否则不能执行循环内的语句。如果 increment 为负,则 Start 必须大于等于 end,这样才能执行循环体。如果没有设置 Step,则 increment 缺省值为 1。
在执行 For 循环时,Visual Basic
1. 设置 counter 等于 start。
2. 测试 counter 是否大于 end。若是的话,则 Visual Basic 退出循环。 (若 increment 为负,则 Visual Basic 测试 counter 是否小于 end。)
3. 执行语句。
4. counter 增加一,或者增加 increment(如果已指定的话)。
5. 重复步骤 2 到步骤 4。
以下代码打印出所有有效的屏幕字体名:
Private Sub Form_Click ()
Dim I As Integer
For i = 0 To Screen.FontCount
Print Screen.Fonts (i)
Next
End Sub
在 VCR 示例应用程序中,HighlightButton 过程使用 For...Next 循环,一步步经过 VCR 窗体的控件集合,并显示适当的 Shape 控件:
Sub HighlightButton (MyControl As Variant)
Dim i As Integer
For i = 0 To frmVCR.Controls.Count - 1
If TypeOf frmVCR.Controls (i) Is Shape Then
If frmVCR.Controls (i).Name = MyControl Then
frmVCR.Controls (i).Visible = True
Else
frmVCR.Controls (i).Visible = False
End If
End If
Next
End Sub

For Each...Next
For Each...Next 循环与 For...Next 循环类似,但它对数组或对象集合中的每一个元素重复一组语句,而不是重复语句一定的次数。如果不知道一个集合有多少元素, For Each...Next 循环非常有用。
For Each...Next 循环的语法如下:
For Each element In group
statements
Next elementt
例如,下面的子过程打开 Biblio.mdb,把每一个表的名字加到列表框中。
Sub ListTableDefs ()
Dim objDb As Database
Dim MyTableDef as TableDef
Set objDb = OpenDatabase("c:\vb\biblio.mdb", _
True, False)
For Each MyTableDef In objDb.TableDefs ()
List1.AddItem MyTableDef.Name
Next MyTableDef
End Sub
请记住使用 For Each...Next 时的几点限制:
1.对集合,element 只能是 Variant 变量,或一般的 Object 变量,或“对象浏览器”中列出的对象。
2.对数组,element 只能是 Variant 变量。
3.For Each...Next 不能与用户自定义类型的数组一起使用,因为 Variant 不可能包含用户自定义类型。

使用控制结构
嵌套控制结构可以把控制结构放入另一个控制结构之内(例如在 For...Next 循环中的If...Then 块)。一个控制结构内部包含另一个控制结构叫做 nest(嵌套)。在 Visual Basic 中,控制结构的嵌套层数没有限制。按一般习惯,为了使判定结构和循环结构更具可读性,总是用缩排方式书写判定结构或循环的正文部分。
例如,下面的过程要把打印机和屏幕共有的字体名全部打印出来:
Private Sub Form_Click ()
Dim SFont, PFont
For Each SFont In Screen.Fonts ()
For Each PFont In Printer.Fonts ()
If SFont = PFont Then
Print SFont
End If
Next PFont
Next SFont
End Sub
注意,第一个 Next 关闭了内层的 For 循环,而最后一个 For 关闭了外层的 For 循环。同样,在嵌套的 If 语句中,End If 语句自动与最靠近的前一个 If 语句配对。嵌套的 Do...Loop 结构的工作方式也是一样的,最内圈的 Loop 语句与最内圈的 Do 语句匹配。

退出控制结构
用 Exit 语句可以直接退出 For 循环、Do 循环、子过程或函数过程。Exit 语句的语法很简单:Exit For 在 For 循环中出现的次数没有限制,Exit Do 在Do 循环中出现的次数也没有限制。
For counter = start To end
[Step increment]
[statementblock]
[Exit For]
[statementblock]
Next [counter[, counter] [,...]]
Do [{While | Until} condition]
[statementblock]
[Exit Do]
[statementblock]

Loop
Exit Do 语句可以在 Do 循环语法的所有版本中使用。
Exit For 和 Exit Do 非常有用,因为它有时适于立即退出循环,而且不再执行循环中的任何进一步迭代或者语句。例如,在前面的打印屏幕和打印机共有字体的例子中,程序不断将打印机字体和给定的屏幕字体作比较,甚至在已经找到了一个相符的打字机字体后还在继续寻找。对这个函数有一个效率更高的改进版,在此,只要找到相匹配的字体后就立即退出循环:
Private Sub Form_Click ()
Dim SFont, PFont
For Each SFont In Screen.Fonts ()
For Each PFont In Printer.Fonts ()
If SFont = PFont Then
Print Sfont
Exit For '退出内圈循环。
End If
Next PFont
Next SFont
End Sub
正如此例所表明的, Exit 语句几乎总是出现在 If 语句或 Select Case 语句内部,而 If 语句或 Select Case 语句在循环内嵌套。
用 Exit 语句中断循环时,计数器变量的值会因退出循环的方式而不同:
1.在完成循环时,计数器的值等于上限值加上步进值。
2.在提前退出循环时,计数器变量保持其值,并遵从有关取值范围的一般规则。
3.在集合之外叠代时,如果计数器变量为 Object 类型,则其值为Nothing;如果计数器变量为 Variant 类型,则其值为 Empty。

退出子过程或函数过程
也可从控制结构内部退出过程。Exit Sub 和 Exit Function 的语法,和上一节“退出控制结构”中的 Exit For 和 Exit Do 相似。Exit Sub 可以出现在子过程主体内的任何地方,出现的次数随需要而定。
当过程已完成每个任务并可直接返回时,Exit Sub 和 Exit Function 是非常有用的。例如,如果想改动前面的例子,使得对查找到的打印机和屏幕的共有字体,只打印其中的第一个,则可用 Exit Sub :
Private Sub Form_Click ()
Dim SFont, PFont
For Each SFont In Screen.Fonts ()
For Each PFont In Printer.Fonts ()
If SFont = PFont Then
Print Sfont
Exit Sub '退出过程。
End If
Next PFont
Next SFont
End Sub

时间: 2024-09-17 16:14:54

vb控制结构概述的相关文章

vb神童教程(续)

第一部分:vb数据库操作实例 vb神童教程(续)--编写一个小型的信息管理系统 vb神童教程(续)--准备数据库 vb神童教程(续)--设计系统的界面及对象的属性 vb神童教程(续)--为对象添加事件代码 第二部分:补充内容 vb神童教程(续)--ODBC数据源简介 vb神童教程(续)--配置Access数据源 vb神童教程(续)---配置SQL Server数据源 vb神童教程(续)--VB的ADO对象 vb神童教程(续)--vb adodb Connection对象简介 vb神童教程(续)-

vb变量、常数和数据类型及过程概述(十一)

提供可选参数的缺省值 也可以给可选参数指定缺省值.在下例中,如果未将可选参数传递到函数过程,则返回一个缺省值.Sub ListText(x As String, Optional y As _Integer = 12345)List1.AddItem xList1.AddItem yEnd Sub Private Sub Command1_Click ()strName = "yourname" '未提供第二个参数.Call ListText (strName) '添加"yo

vb变量、常数和数据类型及过程概述(四)

Numeric 数据类型Visual Basic 支持几种 Numeric 数据类型:Integer(整型).Long(长整型).Single(单精度浮点型).Double(双精度浮点型)和 Currency(货币型).与 Variant 类型相比,Numeric 类型占用的存储空间通常要少.如果知道变量总是存放整数(如 12 )而不是带小数点的数字(如 3.57),就应当将它声明为 Integer 类型或 Long 类型.整数的运算速度较快,而且比其它数据类型占据的内存要少.在 For...N

VB 思维导图总结(一)

早该进入数据库的学习了,不过在师父张薄的指导下我还是先把之前的VB再系统的整合一下,就像米老师说的,先把基础打好.起初的慢是为了以后的块,相信没错的. 下面是我对整个VB学习的整理. 第二章.vb语言基础.                   第三章.vb控制结构                          第四章.常用内部控件.                               第五章.数组..                       本人乃菜鸟一枚,却有着大牛的志向,从零

vb变量、常数和数据类型及过程概述(九)

过程概述 将程序分割成较小的逻辑部件就可以简化程序设计任务.称这些部件为过程,它们可以变成增强和扩展 Visual Basic 的构件. 过程可用于压缩重复任务或共享任务,例如,压缩频繁的计算.文本与控件操作和数据库操作.用过程编程有两大好处:1.过程可使程序划分成离散的逻辑单元,每个单元都比无过程的整个程序容易调试.2.一个程序中的过程,往往不必修改或只需稍作改动,便可以成为另一个程序的构件.在 Visual Basic 中使用下列几种过程:Sub 过程不返回值.Function 过程返回值.

vb变量、常数和数据类型及过程概述(三)

常数 经常会发现代码包含一些常数值,它们一次又一次地反复出现.还可发现,代码要用到很难记住的数字,而那些数字没有明确意义.在这些情况下,可用常数大幅度地改进代码的可读性和可维护性.常数是有意义的名字,取代永远不变的数值或字符串.尽管常数有点像变量,但不能像对变量那样修改常数,也不能对常数赋以新值.常数有两种来源:1.内部的或系统定义的常数是应用程序和控件提供的.在"对象浏览器"中的 Visual Basic ( VB ) .和 Visual Basic for applications

vb变量、常数和数据类型及过程概述(十二)

If...Then...Else用 If...Then...Else 块定义几个语句块,执行其中一个语句:If condition1 Then[statementblock-1][ElseIf condition2 Then[statementblock-2]] ...[Else[statementblock-n]]End IfVisual Basic 首先测试 condition1.如果它为 False,Visual Basic就测试condition2,依此类推,直到找到一个为 True 的

vb变量、常数和数据类型及过程概述(十)

标准模块中的过程如果过程名是唯一的,则不必在调用时加模块名.无论是在模块内,还是在模块外调用,结果总会引用这个唯一过程.如果过程仅出现在一个地方,这个过程就是唯一的.如果两个以上的模块都包含同名的过程,那就有必要用模块名来限定了.在同一模块内调用一个公共过程就会运行该模块内的过程.例如,对于Module1 和 Module2 中名为 CommonName 的过程,从 Module2 中调用CommonName 则运行 Module2 中的CommonName过程,而不是 Module1中的 Co

vb变量、常数和数据类型及过程概述(八)

用循环操作数组可以用 For 循环嵌套有效的处理多维数组.例如,在 MatrixA 中基于每个元素在数组中的位置为其赋值:Dim I As Integer, J As IntegerStatic MatrixA(1 To 10, 1 To 10) As DoubleFor I = 1 To 10For J = 1 To 10MatrixA (I, J) = I * 10 + JNext JNext I详细信息 关于循环的详细信息,请参阅本章后面的"循环结构"部分. 动态数组数组到底应该