Dela via


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, Elseoch 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.

Diagram that shows an example of invalid nesting.

Visual Basic-kompilatorn identifierar sådana överlappande kontrollstrukturer och signalerar ett kompileringsfel.

Se även