Megosztás a következőn keresztül:


Beágyazott vezérlőstruktúrák (Visual Basic)

A vezérlő utasításokat más vezérlő utasításokban is elhelyezheti, például egy If...Then...Else cikluson belüli blokkot For...Next . A másik vezérlőutasításba helyezett vezérlőutasítások beágyazottnak minősülnek.

Beágyazási szintek

A Visual Basic vezérlőstruktúrái tetszőleges számú szintre ágyazhatók. Gyakori gyakorlat a beágyazott struktúrák olvashatóbbá tétele az egyes elemek törzsének behúzásával. Ezt az integrált fejlesztési környezet (IDE) szerkesztője automatikusan elvégzi.

Az alábbi példában az eljárás sumRows összeadja a mátrix egyes sorainak pozitív elemeit.

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  

Az előző példában az első Next utasítás bezárja a belső For hurkot, az utolsó Next utasítás pedig bezárja a külső For hurkot.

Hasonlóképpen, a beágyazott If utasításokban az End If utasítások automatikusan a legközelebbi előző If utasításra vonatkoznak. A beágyazott Do hurkok hasonló módon működnek, a legbelső utasítással egyező Do legbelső Loop utasítással.

Feljegyzés

Számos vezérlőszerkezet esetében, amikor egy kulcsszóra kattint, a szerkezet összes kulcsszója ki van emelve. Ha például egy konstrukcióra kattintIf, a rendszer kiemeli a , Then, ElseIf, Elseés End If az építés összes példányátIf.If...Then...Else Ha a következő vagy az előző kiemelt kulcsszóra szeretne lépni, nyomja le a CTRL+SHIFT+LE vagy a CTRL+SHIFT+FEL billentyűkombinációt.

Különböző típusú vezérlőstruktúrák beágyazása

Egy vezérlőszerkezetet egy másik típusba ágyazhat be. Az alábbi példa egy hurokban lévő For Each blokkot With és a With blokkon belüli beágyazott If blokkokat használ.

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  

Átfedésben lévő vezérlőstruktúrák

A vezérlőstruktúrák nem fedhetők át. Ez azt jelenti, hogy minden beágyazott struktúrát teljes mértékben a következő legbelső struktúrában kell tárolni. A következő elrendezés például érvénytelen, mert a hurok a For belső With blokk leállása előtt leáll.

Diagram that shows an example of invalid nesting.

A Visual Basic fordító észleli az ilyen átfedésben lévő vezérlőstruktúrákat, és fordítási időt jelző hibát jelez.

Lásd még