可以将控制语句放入其他控制语句内,例如 If...Then...Else 循环中的 For...Next 块。 放入另一个控制语句内的控制语句称为嵌套语句。
嵌套级别
Visual Basic 中的控件结构可以嵌套到任意数量的级别。 通过缩进每一个结构的主体,使嵌套结构更易于阅读是常见的做法。 集成开发环境 (IDE) 编辑器会自动执行此作。
在以下示例中,该过程 sumRows 将矩阵的每一行的正元素加在一起。
Public Sub sumRows(ByVal a(,) As Double, ByRef r() As Double)
Dim i, j As Integer
For i = 0 To UBound(a, 1)
r(i) = 0
For j = 0 To UBound(a, 2)
If a(i, j) > 0 Then
r(i) = r(i) + a(i, j)
End If
Next j
Next i
End Sub
在前面的示例中,第一个 Next 语句关闭内部 For 循环,最后 Next 一个语句关闭外部 For 循环。
同样,在嵌套 If 语句中,语句 End If 会自动应用于最近的前 If 一语句。 嵌套 Do 循环的工作方式类似,最内层 Loop 的语句与最 Do 内层的语句匹配。
注释
对于许多控件结构,单击关键字时,将突出显示结构中的所有关键字。 例如,在If构造中点击If...Then...Else时,将突出显示构造中的所有实例If、Then、ElseIf、Else和End If。 若要移动到下一个或上一个突出显示的关键字,请按 Ctrl+Shift+向下键或 Ctrl+Shift+向上键。
嵌套不同类型的控制结构
可以在另一种类型的控制结构中嵌套一种控制结构。 以下示例在With循环内使用For Each块,并在If块内嵌套With块。
For Each ctl As System.Windows.Forms.Control In Me.Controls
With ctl
.BackColor = System.Drawing.Color.Yellow
.ForeColor = System.Drawing.Color.Black
If .CanFocus Then
.Text = "Colors changed"
If Not .Focus() Then
' Insert code to process failed focus.
End If
End If
End With
Next ctl
重叠控件结构
不能重叠控件结构。 这意味着任何嵌套结构都必须完全包含在下一个最内部的结构中。 例如,以下排列无效,因为 For 循环在内部 With 块终止之前终止。
Visual Basic 编译器检测此类重叠的控制结构,并发出编译时错误信号。