嵌套的控件结构 (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 时,将突出显示该构造中 IfThenElseIfElseEnd 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 之前终止。

Diagram that shows an example of invalid nesting.

Visual Basic 编译器可检测此类重叠控制结构,并指示发生编译时错误。

另请参阅