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.

Diagram that shows an example of invalid nesting.

Le compilateur Visual Basic détecte ces structures de contrôle qui se chevauchent et signale une erreur de compilation.

Voir aussi