Kapslade kontrollstrukturer (Visual Basic)
Du kan placera kontrollinstruktioner i andra kontrollinstruktioner, till exempel ett If...Then...Else
block i en For...Next
loop. Ett kontrolluttryck som placeras i ett annat kontrolluttryck sägs vara kapslat.
Kapslingsnivåer
Kontrollstrukturer i Visual Basic kan kapslas till så många nivåer som du vill. Det är vanligt att göra kapslade strukturer mer läsbara genom att dra in brödtexten för var och en. IDE-redigeraren (Integrated Development Environment) gör detta automatiskt.
I följande exempel lägger proceduren sumRows
ihop de positiva elementen i varje rad i matrisen.
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
I föregående exempel stänger den första Next
instruktionen den inre For
loopen och den sista Next
instruktionen stänger den yttre For
loopen.
På samma sätt gäller uttrycken End If
automatiskt för närmaste föregående If
instruktion i kapslade If
instruktioner. Kapslade Do
loopar fungerar på ett liknande sätt, med den innersta Loop
instruktionen som matchar den innersta Do
instruktionen.
Kommentar
För många kontrollstrukturer är alla nyckelord i strukturen markerade när du klickar på ett nyckelord. När du till exempel klickar If
i en If...Then...Else
konstruktion markeras alla instanser av If
, Then
, ElseIf
, Else
och End If
i konstruktionen. Om du vill flytta till nästa eller föregående markerade nyckelord trycker du på CTRL+SKIFT+NEDÅTPIL eller CTRL+SKIFT+UPPÅTPIL.
Kapsla olika typer av kontrollstrukturer
Du kan kapsla en typ av kontrollstruktur inom en annan typ. I följande exempel används ett With
block i en For Each
loop och kapslade If
block i With
blocket.
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
Överlappande kontrollstrukturer
Du kan inte överlappa kontrollstrukturer. Det innebär att alla kapslade strukturer måste vara helt inneslutna i nästa innersta struktur. Följande arrangemang är till exempel ogiltigt eftersom loopen For
avslutas innan det inre With
blocket avslutas.
Visual Basic-kompilatorn identifierar sådana överlappande kontrollstrukturer och signalerar ett kompileringsfel.