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

Řídicí příkazy můžete umístit do jiných řídicích příkazů, například If...Then...Else do bloku ve smyčce For...Next . Řídicí příkaz umístěný uvnitř jiného řídicího příkazu je vnořený.

Úrovně vnoření

Řídicí struktury v jazyce Visual Basic lze vnořit na libovolný počet úrovní. Běžně se doporučuje, aby vnořené struktury byly čitelnější odsazením těla každého z nich. Editor integrovaného vývojového prostředí (IDE) to udělá automaticky.

V následujícím příkladu procedura sumRows sečte 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.

Podobně v 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ž nejvnitřnější Loop příkaz odpovídá příkazu innermost Do .

Poznámka:

U mnoha řídicích struktur se po kliknutí na klíčové slovo zvýrazní všechna klíčová slova ve struktuře. Když například kliknete If na If...Then...Else výstavbu, zvýrazní se všechny výskyty If, Then, ElseIf, Elsea End If v konstrukci. Pokud chcete přejít na další nebo předchozí zvýrazněné klíčové slovo, stiskněte kombinaci kláves CTRL+SHIFT+ŠIPKA DOLŮ nebo CTRL+SHIFT+ŠIPKA NAHORU.

Vnoření různých druhů řídicích struktur

Jeden druh řídicí struktury 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

Řídicí struktury nelze překrývat. To znamená, že jakákoli vnořená struktura musí být zcela obsažena v další vnitřní struktuře. Například následující uspořádání je neplatné, protože smyčka For se ukončí před ukončením vnitřního With bloku.

Diagram that shows an example of invalid nesting.

Kompilátor jazyka Visual Basic zjistí takové překrývající se řídicí struktury a signalizuje chybu v době kompilace.

Viz také