Zagnieżdżone struktury sterujące (Visual Basic)

Instrukcje sterowania można umieścić wewnątrz innych instrukcji kontrolek, na przykład If...Then...Else blok w For...Next pętli. Mówi się, że instrukcja sterowania umieszczona wewnątrz innej instrukcji sterowania jest zagnieżdżona.

Poziomy zagnieżdżania

Struktury sterujące w Visual Basic można zagnieżdżać do tylu poziomów, ile chcesz. Powszechną praktyką jest zwiększenie czytelności zagnieżdżonych struktur przez wcięcie treści każdego z nich. Edytor zintegrowanego środowiska projektowego (IDE) automatycznie to robi.

W poniższym przykładzie procedura sumRows dodaje dodatnie elementy każdego wiersza macierzy.

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  

W poprzednim przykładzie pierwsza Next instrukcja zamyka pętlę wewnętrzną For , a ostatnia Next instrukcja zamyka pętlę zewnętrzną For .

Podobnie w instrukcjach End If zagnieżdżonych If instrukcje są automatycznie stosowane do najbliższej wcześniejszej If instrukcji. Zagnieżdżone Do pętle działają w podobny sposób, z najbardziej Loop wewnętrzną instrukcją zgodną z najbardziej Do wewnętrzną instrukcją.

Uwaga

W przypadku wielu struktur kontrolek po kliknięciu słowa kluczowego wszystkie słowa kluczowe w strukturze są wyróżnione. Na przykład po kliknięciu konstrukcji wszystkie wystąpienia , Then, ElseIfElsei End If w konstrukcji zostaną wyróżnioneIf.IfIf...Then...Else Aby przejść do następnego lub poprzedniego wyróżnionego słowa kluczowego, naciśnij klawisze CTRL+SHIFT+STRZAŁKA W DÓŁ lub CTRL+SHIFT+STRZAŁKA W GÓRĘ.

Zagnieżdżanie różnych rodzajów struktur kontrolnych

Można zagnieżdżać jedną strukturę sterowania w innym rodzaju. W poniższym przykładzie użyto With bloku wewnątrz For Each pętli i zagnieżdżonych If bloków wewnątrz 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  

Nakładające się struktury sterujące

Nie można nakładać się na struktury sterujące. Oznacza to, że każda struktura zagnieżdżona musi być całkowicie zawarta w następnej najbardziej wewnętrznej strukturze. Na przykład następujące rozmieszczenie jest nieprawidłowe, ponieważ pętla For kończy się przed zakończeniem bloku wewnętrznego With .

Diagram that shows an example of invalid nesting.

Kompilator Visual Basic wykrywa takie nakładające się struktury sterujące i sygnalizuje błąd czasu kompilacji.

Zobacz też