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