Strutture di controllo annidate (Visual Basic)

È possibile inserire istruzioni di controllo all'interno di altre istruzioni di controllo, ad esempio un If...Then...Else blocco all'interno di un For...Next ciclo. Un'istruzione di controllo inserita all'interno di un'altra istruzione del controllo viene considerata annidata.

Livelli di annidamento

Le strutture di controllo in Visual Basic possono essere annidate a tutti i livelli desiderati. È pratica comune rendere più leggibili le strutture annidate impostando il rientro del corpo di ognuno di essi. L'editor IDE (Integrated Development Environment) esegue automaticamente questa operazione.

Nell'esempio seguente la routine sumRows aggiunge gli elementi positivi di ogni riga della 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  

Nell'esempio precedente la prima Next istruzione chiude il ciclo interno For e l'ultima Next istruzione chiude il ciclo esterno For .

Analogamente, nelle istruzioni annidate If , le End If istruzioni si applicano automaticamente all'istruzione precedente If più vicina. I cicli annidati Do funzionano in modo simile, con l'istruzione più interna corrispondente all'istruzione più LoopDo interna.

Nota

Per molte strutture di controllo, quando si fa clic su una parola chiave, vengono evidenziate tutte le parole chiave nella struttura. Ad esempio, quando si fa clic If in una If...Then...Else costruzione, vengono evidenziate tutte le istanze di If, Then, ElseElseIf, e End If nella costruzione. Per passare alla parola chiave evidenziata successiva o precedente, premere CTRL+MAIUSC+FRECCIA GIÙ o CTRL+MAIUSC+FRECCIA SU.

Annidamento di diversi tipi di strutture di controllo

È possibile annidare un tipo di struttura di controllo all'interno di un altro tipo. Nell'esempio seguente viene usato un With blocco all'interno di un For Each ciclo e blocchi annidati If all'interno del With blocco .

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  

Strutture di controllo sovrapposte

Non è possibile sovrapporsi alle strutture di controllo. Ciò significa che qualsiasi struttura annidata deve essere completamente contenuta all'interno della struttura più interna successiva. Ad esempio, la disposizione seguente non è valida perché il For ciclo termina prima del termine del blocco interno With .

Diagramma che mostra un esempio di annidamento non valido.

Il compilatore Visual Basic rileva tali strutture di controllo sovrapposte e segnala un errore in fase di compilazione.

Vedi anche