嵌套的控件结构 (Visual Basic)
可以将控制语句放在其他控制语句中,例如 For...Next 循环中的 If...Then...Else 块。 将一个控制语句放在另一个控制语句中称为“嵌套”。
嵌套级别
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...Then...Else 构造中单击 If 时,该构造中的所有 If、Then、ElseIf、Else 和 End If 实例都会突出显示。 若要移动到下一个或上一个突出显示的关键字,请按 Ctrl+Shift+向下键或 Ctrl+Shift+向上键。 有关更多信息,请参见如何:使用引用突出显示。
嵌套不同类型的控制结构
可以在一种控制结构中嵌套另一种控制结构。 下面的示例在 For Each 循环内使用 With 块,并在 With 块内使用嵌套的 If 块。
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 块终止之前终止。
For 和 With 结构的无效嵌套
Visual Basic 编译器检测到这样的重叠控制结构并发出编译时错误信号。