Strutture di controllo annidate (Visual Basic)Nested Control Structures (Visual Basic)

È possibile inserire le istruzioni di controllo all'interno di altre istruzioni di controllo, ad esempio un If...Then...Else blocchi all'interno di un For...Next ciclo.You can place control statements inside other control statements, for example an If...Then...Else block within a For...Next loop. Un'istruzione di controllo posizionata all'interno di un'altra istruzione di controllo viene detto nidificata.A control statement placed inside another control statement is said to be nested.

Livelli di annidamentoNesting Levels

Strutture di controllo in Visual Basic possono essere annidate a tutti i livelli desiderato.Control structures in Visual Basic can be nested to as many levels as you want. È pratica comune per rendere più leggibile strutture annidate rientrando il corpo della ognuno di essi.It is common practice to make nested structures more readable by indenting the body of each one. L'editor di sviluppo integrato (IDE) di ambiente automaticamente esegue questa operazione.The integrated development environment (IDE) editor automatically does this.

Nell'esempio seguente, la procedura sumRows somma tra gli elementi positivi di ogni riga della matrice.In the following example, the procedure sumRows adds together the positive elements of each row of the matrix.

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, il primo Next istruzione chiude interna For ciclo e l'ultima Next istruzione chiude esterna For ciclo.In the preceding example, the first Next statement closes the inner For loop and the last Next statement closes the outer For loop.

Allo stesso modo, in annidati If (istruzioni), il End If istruzioni si applicano automaticamente per il più vicino prima If istruzione.Likewise, in nested If statements, the End If statements automatically apply to the nearest prior If statement. Annidato Do cicli funzionano in modo analogo, con più interna Loop istruzione corrispondente più interna Do istruzione.Nested Do loops work in a similar fashion, with the innermost Loop statement matching the innermost Do statement.

Nota

Per molte strutture di controllo, quando si fa clic su una parola chiave, sono evidenziate tutte le parole chiave nella struttura.For many control structures, when you click a keyword, all of the keywords in the structure are highlighted. Ad esempio, quando fa clic su If in un If...Then...Else costruzione, tutte le istanze di If, Then, ElseIf, Else, e End If nella costruzione di strutture vengono evidenziati.For instance, when you click If in an If...Then...Else construction, all instances of If, Then, ElseIf, Else, and End If in the construction are highlighted. Per spostare alla parola chiave evidenziata successiva o precedente, premere CTRL + MAIUSC + freccia giù o CTRL + MAIUSC + freccia su.To move to the next or previous highlighted keyword, press CTRL+SHIFT+DOWN ARROW or CTRL+SHIFT+UP ARROW.

Nidificazione di diversi tipi di strutture di controlloNesting Different Kinds of Control Structures

È possibile annidare un tipo di struttura di controllo all'interno di un altro tipo.You can nest one kind of control structure within another kind. L'esempio seguente usa una With blocchi all'interno di un For Each ciclo e nidificate If blocca all'interno del With blocco.The following example uses a With block inside a For Each loop and nested If blocks inside the With block.

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  

La sovrapposizione di strutture di controlloOverlapping Control Structures

Non è possibile sovrapporre le strutture di controllo.You cannot overlap control structures. Ciò significa che qualsiasi struttura annidata debba essere completamente contenuta all'interno della successiva struttura più interna.This means that any nested structure must be completely contained within the next innermost structure. Ad esempio, la disposizione seguente non è valida perché il For ciclo termina prima del With blocco termina.For example, the following arrangement is invalid because the For loop terminates before the inner With block terminates.

Diagramma che mostra un esempio di annidamento non valida.

Il compilatore Visual Basic rileva le strutture di controllo sovrapposte e segnala un errore in fase di compilazione.The Visual Basic compiler detects such overlapping control structures and signals a compile-time error.

Vedere ancheSee also