Estruturas de controle aninhadas (Visual Basic)
Você pode colocar instruções de controle dentro de outras instruções de controle, por exemplo, um bloco If...Then...Else
dentro de um loop For...Next
. Uma instrução de controle colocada dentro de outra instrução de controle é considerada aninhada.
Níveis de Aninhamento
As estruturas de controle no Visual Basic podem ser aninhadas para quantos níveis desejar. É prática comum tornar as estruturas aninhadas mais legíveis recuando o corpo de cada uma delas. O editor do IDE (ambiente de desenvolvimento integrado) faz isso automaticamente.
No exemplo a seguir, o procedimento sumRows
adiciona 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 instrução Next
fecha o loop interno For
e a última instrução Next
fecha o loop externo For
.
Da mesma forma, em instruções aninhadas If
, as instruções End If
se aplicam automaticamente à instrução If
anterior mais próxima. Os loops aninhados Do
funcionam de maneira semelhante, com a instrução Loop
mais interna correspondendo à instrução Do
mais interna.
Observação
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 construção If...Then...Else
, todas as instâncias de If
, Then
, ElseIf
, Else
e End If
na construção são realçadas. Para passar para a próxima palavra-chave realçada ou para a anterior, pressione CTRL+SHIFT+SETA PARA BAIXO ou CTRL+SHIFT+SETA PARA CIMA.
Aninhando 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 bloco With
dentro de um loop For Each
e blocos If
aninhados dentro do blocoWith
.
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 Controle Sobrepostas
Não é possível sobrepor estruturas de controle. Isso significa que qualquer estrutura aninhada precisa estar completamente contida na próxima estrutura interna. Por exemplo, a disposição a seguir é inválida porque o loop For
termina antes que o bloco With
interno seja encerrado.
O compilador do Visual Basic detecta essas estruturas de controle sobrepostas e sinaliza um erro em tempo de compilação.