Estructuras de control anidadas (Visual Basic)

Puedea colocar instrucciones de control dentro de otras instrucciones de control, por ejemplo, un bloque If...Then...Else dentro de un bucle For...Next. Se dice que una instrucción de control situada dentro de otra instrucción de control está anidada.

Niveles de anidamiento

Las estructuras de control de Visual Basic se pueden anidar a tantos niveles como desees. Es habitual hacer que las estructuras anidadas sean más legibles al aplicar sangría al cuerpo de cada una. El editor del entorno de desarrollo integrado (IDE) lo hace automáticamente.

En el ejemplo siguiente, el procedimiento sumRows agrega los elementos positivos de cada fila de la matriz.

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  

En el ejemplo anterior, la primera Next instrucción cierra el bucle interno For y la última Next instrucción cierra el bucle externo For.

Del mismo modo, en instrucciones anidadas If, las instrucciones End If se aplican automáticamente a la instrucción anterior más cercana If. Los bucles anidados Do funcionan de forma similar, con la instrucción más interna Loop que coincide con la instrucción más interna Do.

Nota

Para muchas estructuras de control, al hacer clic en una palabra clave, se resaltan todas las palabras clave de la estructura. Por ejemplo, al hacer clic If en una construcción If...Then...Else, se resaltan todas las instancias de If, Then, ElseIf, Else y End If en la construcción. Para desplazarte a la siguiente palabra clave resaltada o a la anterior, presiona CTRL+MAYÚS+FLECHA ABAJO o CTRL+MAYÚS+FLECHA ARRIBA.

Anidar diferentes tipos de estructuras de control

Puedes anidar un tipo de estructura de control dentro de otro tipo. En el ejemplo siguiente se usa un bloque With dentro de un bucle For Each y bloques anidados If dentro del bloque 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  

Estructuras de control superpuestas

No se pueden superponer estructuras de control. Esto significa que cualquier estructura anidada debe estar completamente contenida dentro de la siguiente estructura más interna. Por ejemplo, la siguiente disposición no es válida porque el bucle For finaliza antes de que finalice el bloque interno With.

Diagram that shows an example of invalid nesting.

El compilador de Visual Basic detecta estas estructuras de control superpuestas y señala un error en tiempo de compilación.

Consulte también