Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
.
Kompilator języka Visual Basic wykrywa takie nakładające się struktury kontrolek i sygnalizuje błąd czasu kompilacji.