Compartilhar via


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 bloquear dentro de um For...Next loop. Uma instrução de controle colocada dentro de outra instrução de controle é considerada aninhadas.

Níveis de aninhamento

Controlar as estruturas na Visual Basic podem ser aninhadas para quantos níveis forem desejados. É prática comum para facilitar a leitura estruturas aninhadas recuando o corpo de cada um deles. O editor de desenvolvimento integrado (IDE) do ambiente faz isso automaticamente.

No exemplo a seguir, o procedimento sumRows adiciona, juntos, 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, o primeiro Next instrução fecha interno For loop e a última Next instrução fecha o externo For loop.

Da mesma forma, aninhados em If instruções, o End If instruções são aplicadas automaticamente ao mais próximo antes de If instrução. Aninhado Do loops funcionam de maneira semelhante, com interno Loop interno de correspondência de instrução Do instrução.

Dica

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 em If em um If...Then...Else construção, todas as instâncias de If, Then, ElseIf, Else, e End If na construção são realçadas.Para mover para a palavra-chave seguinte ou anterior, pressione CTRL + SHIFT + seta para baixo ou CTRL + SHIFT + seta para cima.

O 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 bloqueados dentro um For Each um loop e aninhados If bloqueia 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

Sobreposição de estruturas de controle

Você não pode sobrepor as estruturas de controle. Isso significa que qualquer estrutura aninhada deve estar totalmente contida a próxima estrutura mais interna. Por exemplo, a organização a seguir é inválida porque a For loop é encerrado antes interno With termina de bloco.

Aninhamento de inválido para e com estruturas

Diagrama gráfico de aninhamento inválido

O Visual Basic compilador detecta estruturas de controle como sobreposto e sinaliza a um erro de tempo de compilação.

Consulte também

Conceitos

Estruturas de decisão (Visual Basic)

Estruturas de loop (Visual Basic)

Outras estruturas de controle (Visual Basic)

Outros recursos

Fluxo de controle no Visual Basic