嵌套的控件结构 (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 编译器检测到这样的重叠控制结构并发出编译时错误信号。

请参见

任务

如何:将控件转移到控件结构外 (Visual Basic)

概念

决策结构 (Visual Basic)

循环结构 (Visual Basic)

其他控件结构 (Visual Basic)

其他资源

控制流 (Visual Basic)