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ásokba is elhelyezheti, például egy If...Then...Else blokkot egy For...Next ciklusban. 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, ahol a legbelső Loop utasítás a legbelső Do utasítással egyezik.

Megjegyzés:

Számos vezérlőszerkezet esetében, amikor egy kulcsszóra kattint, a szerkezet összes kulcsszója ki van emelve. Amikor például rákattint a If egy If...Then...Else konstrukción belül, a rendszer kiemeli a If, Then, ElseIf, Else és End If összes példányát a konstrukcióban. Ha a következő vagy az előző kiemelt kulcsszóra szeretne lépni, nyomja le a CTRL+SHIFT+LE NYÍL vagy a CTRL+SHIFT+FEL NYÍL gombokat.

Különböző vezérlőstruktúrák egymásba ágyazása

Egy vezérlőszerkezetet egy másik típusba ágyazhat be. Az alábbi példa használ egy With blokkot a For Each hurokban és beágyazott If blokkokat a With blokkon belü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

Nem lehet átülepni a vezérlőstruktúrákat. 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.

Érvénytelen beágyazást szemléltető ábra.

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