Estruturas de controle aninhadas (Visual Basic)

Você pode colocar instruções de controle dentro de outras instruções de controle, por exemplo, um If...Then...Else bloco dentro de um For...Next loop. Diz-se que uma declaração de controlo colocada dentro de outra declaração de controlo está aninhada.

Níveis de aninhamento

As estruturas de controle no Visual Basic podem ser aninhadas em quantos níveis você quiser. É prática comum tornar as estruturas aninhadas mais legíveis, recuando o corpo de cada uma. O editor de ambiente de desenvolvimento integrado (IDE) faz isso automaticamente.

No exemplo a seguir, o procedimento sumRows soma os elementos positivos de cada linha da matriz.

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  

No exemplo anterior, a primeira Next instrução fecha o loop interno For e a última Next instrução fecha o loop externo For .

Da mesma forma, em declarações aninhadas If , as End If instruções se aplicam automaticamente à instrução anterior If mais próxima. Os loops aninhados Do funcionam de maneira semelhante, com a instrução mais Loop interna correspondendo à instrução mais Do interna.

Nota

Para muitas estruturas de controle, quando você clica em uma palavra-chave, todas as palavras-chave na estrutura são realçadas. Por exemplo, quando você clica If em uma If...Then...Else construção, todas as instâncias de If, Then, ElseIf, Elsee End If na construção são realçadas. Para ir para a palavra-chave realçada seguinte ou anterior, prima CTRL+SHIFT+SETA PARA BAIXO ou CTRL+SHIFT+SETA PARA CIMA.

Aninhamento de diferentes tipos de estruturas de controle

Você pode aninhar um tipo de estrutura de controle dentro de outro tipo. O exemplo a seguir usa um With bloco dentro de um For Each loop e blocos aninhados If dentro do With bloco.

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  

Estruturas de controlo sobrepostas

Não é possível sobrepor estruturas de controle. Isso significa que qualquer estrutura aninhada deve estar completamente contida na próxima estrutura mais interna. Por exemplo, a disposição a seguir é inválida porque o For loop termina antes que o bloco interno With termine.

Diagram that shows an example of invalid nesting.

O compilador do Visual Basic deteta essas estruturas de controle sobrepostas e sinaliza um erro em tempo de compilação.

Consulte também