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
.
El compilador de Visual Basic detecta estas estructuras de control superpuestas y señala un error en tiempo de compilación.