Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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. 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 você quiser. É 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 Next instrução fecha o loop interno For e a última Next instrução 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 bloco With.
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 deve estar completamente contida na próxima estrutura interna. Por exemplo, a disposição a seguir é inválida porque o For loop termina antes que o bloco interno With seja encerrado.
O compilador do Visual Basic detecta essas estruturas de controle sobrepostas e sinaliza um erro de tempo de compilação.