Vnořené řídicí struktury (Visual Basic)

Řídicí příkazy lze umístit do jiných řídicích příkazů, například If...Then...Else bloku v rámci For...Next smyčky. Řídicí příkaz umístěný uvnitř jiného kontrolního příkazu je označován jako vnořený.

Vnořování úrovní

řídicí struktury v Visual Basic můžou být vnořené do tolika úrovní, kolik chcete. Je běžné, že vnořené struktury budou čitelnější, když odsadíte tělo každé z nich. To dělá Editor integrovaného vývojového prostředí (IDE) automaticky.

V následujícím příkladu postup sumRows přidá do sebe kladné prvky každého řádku matice.

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  

V předchozím příkladu první Next příkaz zavře vnitřní For smyčku a poslední Next příkaz zavře vnější For smyčku.

Stejně tak ve vnořených If příkazech se End If příkazy automaticky použijí na nejbližší předchozí If příkaz. Vnořené Do smyčky fungují podobným způsobem, přičemž vnitřní Loop příkaz odpovídá nejvnitřnějšímu Do příkazu.

Poznámka

U mnoha řídicích struktur se při kliknutí na klíčové slovo zvýrazní všechna klíčová slova ve struktuře. Například při kliknutí na If If...Then...Else konstrukci If Then jsou zvýrazněny všechny instance,,, ElseIf Else a End If v konstrukci. Chcete-li přejít na další nebo předchozí zvýrazněné klíčové slovo, stiskněte klávesy CTRL + SHIFT + šipka dolů nebo CTRL + SHIFT + šipka nahoru.

Vnořování různých druhů řídicích struktur

Jeden druh struktury ovládacího prvku můžete vnořit do jiného typu. Následující příklad používá With blok uvnitř For Each smyčky a vnořené If bloky uvnitř With bloku.

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  

Překrývající se řídicí struktury

Nemůžete překrývat řídicí struktury. To znamená, že všechny vnořené struktury musí být zcela obsaženy v další nejvnitřnější struktuře. Například následující uspořádání je neplatné, protože For smyčka končí před With ukončením vnitřního bloku.

Diagram, který zobrazuje příklad neplatného vnoření.

kompilátor Visual Basic detekuje takové překrývající se řídicí struktury a signalizuje chybu při kompilaci.

Viz také