Structures de contrôle imbriquées
Mise à jour : novembre 2007
Vous pouvez insérer des instructions de contrôle dans d'autres instructions de contrôle, par exemple un bloc If...Then...Else dans une boucle For...Next. Dans ce cas, l'instruction de contrôle est imbriquée dans une autre instruction de contrôle.
Niveaux d'imbrication
Dans Visual Basic, les structures de contrôle peuvent être imbriquées sur autant de niveaux que nécessaire. Il est courant de mettre en retrait le corps de chaque structure imbriquée afin d'accroître la lisibilité. L'éditeur d'environnement de développement intégré le fait automatiquement.
Dans l'exemple suivant, la procédure sumRows additionne 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 la même manière, dans le sens où l'instruction Loop la plus profonde correspond à l'instruction Do la plus profonde.
Imbrication de genres de structures de contrôle différents
Vous pouvez imbriquer un genre de structure de contrôle dans un autre. 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
Chevauchement de structures de contrôle
Vous ne devez pas faire en sorte que des structures de contrôle se chevauchent. Cela signifie que toute structure imbriquée doit être entièrement contenue dans la structure la plus profonde suivante. Par exemple, la disposition suivante est non valide car la boucle For se termine avant la fin du bloc With interne.
Imbrication non valide de structures For et With
Le compilateur Visual Basic détecte ces chevauchements de structures de contrôle et signale une erreur de compilation.
Voir aussi
Tâches
Comment : transférer un contrôle hors d'une structure de contrôle