Compartir a través de


Estructuras de control anidadas (Visual Basic)

Puede colocar instrucciones de control dentro de otras instrucciones de control, por ejemplo, un If...Then...Else bloque dentro de un For...Next bucle. 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 las instrucciones If anidadas, las instrucciones End If se aplican automáticamente a la instrucción If más cercana anterior. 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 pasar a la palabra clave resaltada siguiente o anterior, presione 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 With bloque dentro de un For Each bucle y bloques anidados If dentro del With bloque.

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 For bucle finaliza antes de que finalice el bloque interno With .

Diagrama que muestra un ejemplo de anidamiento no válido.

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

Consulte también