Delen via


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, ElseIfen ElseEnd 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.

Diagram that shows an example of invalid nesting.

De Visual Basic-compiler detecteert dergelijke overlappende besturingsstructuren en geeft een compilatiefout aan.

Zie ook