Structures de contrôle imbriquées (Visual Basic)
Vous pouvez placer des instructions de contrôle à l’intérieur d’autres instructions de contrôle, par exemple un bloc If...Then...Else
dans une boucle For...Next
. Une instruction de contrôle placée à l’intérieur d’une autre instruction de contrôle est dite imbriquée.
Niveaux d’imbrication
Les structures de contrôle dans Visual Basic peuvent être imbriquées à autant de niveaux que vous le souhaitez. Il est courant de rendre les structures imbriquées plus lisibles en mettant en retrait le corps de chacune d’entre elles. L’éditeur d’environnement de développement intégré (IDE) effectue automatiquement cette opération.
Dans l’exemple suivant, la procédure sumRows
ajoute les éléments positifs de chaque ligne de la matrice.
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
Dans l’exemple précédent, la première instruction Next
ferme la boucle For
interne et la dernière instruction Next
ferme la boucle For
externe.
De même, dans les instructions If
imbriquées, les instructions End If
s’appliquent automatiquement à l’instruction If
précédente la plus proche. Les boucles Do
imbriquées fonctionnent de manière similaire, avec l’instruction Loop
la plus interne correspondant à l’instruction Do
la plus intérieure.
Notes
Pour de nombreuses structures de contrôle, lorsque vous cliquez sur un mot clé, tous les mots clés de la structure sont mis en surbrillance. Par instance, lorsque vous cliquez sur le If
dans une construction If...Then...Else
, toutes les instances de If
, Then
, ElseIf
, Else
et End If
dans la construction sont mises en surbrillance. Pour passer au mot clé en surbrillance suivant ou précédent, appuyez sur CTRL + MAJ + FLÈCHE VERS LE BAS ou CTRL + MAJ + FLÈCHE VERS LE HAUT.
Imbrication de différents genres de structures de contrôle
Vous pouvez imbriquer un genre de structure de contrôle dans un autre genre. L’exemple suivant utilise un bloc With
à l’intérieur d’une boucle For Each
et des blocs If
imbriqués à l’intérieur du bloc 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
Structures de contrôle qui se chevauchent
Vous ne pouvez pas chevaucher les structures de contrôle. Cela signifie que toute structure imbriquée doit être entièrement contenue dans la structure la plus intérieure suivante. Par exemple, la disposition suivante n’est pas valide, car la boucle For
se termine avant la fin du bloc With
interne.
Le compilateur Visual Basic détecte ces structures de contrôle qui se chevauchent et signale une erreur de compilation.