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.