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 If
If...Then...Else
konstrukcji zostaną wyróżnione If
wszystkie wystąpienia elementów , Then
, ElseIf
, Else
i 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
.
Kompilator języka Visual Basic wykrywa takie nakładające się struktury kontrolek i sygnalizuje błąd czasu kompilacji.