Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
.
El compilador de Visual Basic detecta tales estructuras de control superpuestas y señala un error en tiempo de compilación.