Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. 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. 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 legíveis, indentando 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 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 If...Then...Else construção, todas as instâncias de If, Then, ElseIf, Elsee End If na construção são realçadas. Para mover-se para a próxima ou anterior palavra-chave realçada, prima CTRL+SHIFT+SETA PARA BAIXO ou CTRL+SHIFT+SETA PARA CIMA.
Aninhamento de diferentes tipos de estruturas de controle
Você pode aninhar uma estrutura de controlo dentro de outra. 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 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.