Condividi tramite


Strutture di controllo nidificate

Aggiornamento: novembre 2007

È possibile inserire istruzioni di controllo all'interno di altre istruzioni di controllo, ad esempio un blocco If...Then...Else all'interno di un ciclo For...Next. Un'istruzione di controllo inserita in un'altra istruzione di controllo è detta nidificata.

Livelli di nidificazione

In Visual Basic le strutture di controllo possono essere nidificate in un numero qualsiasi di livelli. È pratica diffusa far rientrare il corpo di ogni struttura nidificata per facilitarne la lettura. Questa operazione viene eseguita automaticamente dall'editor dell'ambiente di sviluppo integrato (IDE, Integrated Development Environment).

Nell'esempio che segue viene utilizzata la routine sumRows per sommare 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 istruzione Next chiude il ciclo For interno mente l'ultima istruzione Next chiude il ciclo For esterno.

Analogamente, nelle istruzioni If nidificate le istruzioni End If vengono applicate automaticamente all'istruzione If immediatamente precedente. I cicli Do hanno un funzionamento analogo in base al quale l'istruzione Loop più interna corrisponde all'istruzione Do più interna.

Tipi diversi di nidificazione delle strutture di controllo

È possibile nidificare un tipo di struttura di controllo all'interno di un'altra. Nell'esempio che segue vengono utilizzati un blocco With all'interno di un ciclo For Each e i blocchi If nidificati all'interno del blocco 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

Strutture di controllo sovrapposte

Non è possibile sovrapporre le strutture di controllo. In altre parole, le strutture nidificate devono essere contenute completamente nella successiva struttura più interna. La seguente disposizione, ad esempio, non è valida in quanto il ciclo For termina prima del blocco With interno.

Nidificazione non valida di strutture For e With

Diagramma grafico di nidificazione non valida

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

Vedere anche

Attività

Procedura: trasferire un controllo fuori da una struttura di controllo

Concetti

Strutture decisionali

Strutture di ciclo

Altre strutture di controllo

Altre risorse

Flusso di controllo in Visual Basic