Geneste besturingsstructuren (Visual Basic)
U kunt besturingsinstructies in andere besturingsinstructies plaatsen, bijvoorbeeld een If...Then...Else
blok binnen een For...Next
lus. Een controle-instructie die in een andere controle-instructie wordt geplaatst, wordt gezegd dat deze genest is.
Geneste niveaus
Besturingsstructuren in Visual Basic kunnen worden genest op zoveel niveaus als u wilt. Het is gebruikelijk om geneste structuren beter leesbaar te maken door de hoofdtekst van elke structuur te laten inspringen. De IDE-editor (Integrated Development Environment) doet dit automatisch.
In het volgende voorbeeld voegt de procedure sumRows
de positieve elementen van elke rij van de matrix samen.
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
In het voorgaande voorbeeld sluit de eerste Next
instructie de binnenste For
lus en sluit de laatste Next
instructie de buitenste For
lus.
In geneste If
instructies zijn de End If
instructies ook automatisch van toepassing op de dichtstbijzijnde voorafgaande If
instructie. Geneste Do
lussen werken op een vergelijkbare manier, waarbij de binnenste Loop
instructie overeenkomt met de binnenste Do
instructie.
Notitie
Wanneer u op een trefwoord klikt, worden alle trefwoorden in de structuur gemarkeerd voor veel besturingsstructuren. Wanneer u bijvoorbeeld in een constructie kliktIf
, worden alle exemplaren van If
, Then
, ElseIf
en Else
End If
in de constructie gemarkeerd.If...Then...Else
Als u naar het volgende of vorige gemarkeerde trefwoord wilt gaan, drukt u op Ctrl+Shift+Pijl-omlaag of Ctrl+Shift+Pijl-omhoog.
Verschillende soorten besturingsstructuren nesten
U kunt één soort controlestructuur in een ander soort nesten. In het volgende voorbeeld wordt een With
blok in een For Each
lus en geneste If
blokken in het With
blok gebruikt.
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
Overlappende besturingsstructuren
U kunt besturingsstructuren niet overlappen. Dit betekent dat elke geneste structuur volledig moet worden opgenomen in de volgende binnenste structuur. De volgende rangschikking is bijvoorbeeld ongeldig omdat de For
lus wordt beëindigd voordat het binnenste With
blok wordt beëindigd.
De Visual Basic-compiler detecteert dergelijke overlappende besturingsstructuren en geeft een compilatiefout aan.