Udostępnij za pośrednictwem


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

Instrukcje sterujące 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 kontrolek w Visual Basic można zagnieżdżać na dowolną liczbę poziomów. Częstą 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 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 instrukcjach End If zagnieżdżonych If instrukcje są automatycznie stosowane do najbliższej wcześniejszej If instrukcji. Pętle zagnieżdżone Do 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 IfIf...Then...Else konstrukcji zostaną wyróżnione Ifwszystkie wystąpienia elementów , Then, ElseIf, Elsei End If w konstrukcji. 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 sterujących

Można zagnieżdżać jedną strukturę kontrolki 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ć się struktur sterujących. 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 that shows an example of invalid nesting.

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

Zobacz też