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
, Else
e 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.
O compilador do Visual Basic deteta essas estruturas de controle sobrepostas e sinaliza um erro em tempo de compilação.