Udostępnij za pośrednictwem


Zagnieżdżone struktury kontrolek (Visual Basic)

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

Poziomy zagnieżdżania

Struktury kontrolek w Visual Basic można zagnieżdżać na dowolną liczbę poziomów. Częstą praktyką jest poprawa czytelności zagnieżdżonych struktur poprzez wcięcie treści każdej z nich. Edytor zintegrowanego środowiska projektowego (IDE) automatycznie to robi.

W poniższym przykładzie procedura sumRows dodaje elementy dodatnie 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 przypadku zagnieżdżonych instrukcji If, instrukcje End If są automatycznie stosowane do najbliższej wcześniejszej instrukcji If. Pętle zagnieżdżone Do działają w podobny sposób, z najbardziej wewnętrzną Loop instrukcją odpowiadającą tej samej pozycji Do.

Uwaga / Notatka

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

Zagnieżdżanie różnych rodzajów struktur sterujących

Można zagnieżdżać jeden rodzaj struktury kontrolnej 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 kontrolek

Nie można nakładać struktur sterujących na siebie. 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ący układ jest nieprawidłowy, ponieważ pętla For kończy się przed zakończeniem bloku wewnętrznego With .

Diagram przedstawiający przykład nieprawidłowego zagnieżdżania.

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

Zobacz także