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
, Else
e 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.