Вложенные структуры управления
Обновлен: Ноябрь 2007
Можно разместить операторы управления внутри других операторов управления, например блок If...Then...Else в цикле For...Next. Операторы управления, размешенные внутри другого оператора управления, называются вложенными.
Уровень вложенности
Структуры элементов управления в Visual Basic могут иметь столько уровней вложенности, сколько требуется. В тексте сообщения для удобства чтения принято выделять вложенные структуры различными отступами для каждого из них. Редактор среды разработки (IDE) автоматически делает это.
В следующем примере процедура sumRows складывает положительные элементы каждой строки матрицы:
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
В предыдущем примере первая инструкция Next закрывает внутренний цикл For, а последняя инструкция Next закрывает внешний цикл For.
Аналогично, если используются вложенные операторы If, то операторы End If автоматически сопоставляются с ближайшим перед ними оператором If. Вложенные циклы Do работают аналогичным образом: самый внутренний оператор Loop соответствует самому внутреннему оператору Do.
Вложение различных типов структур управления
Можно вложить один тип структуры управления внутрь другого. В следующем примере используется блок With внутри цикла For Each и вложенные блоки If внутри блока With.
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
Перекрывающиеся структуры управления
Нельзя допускать перекрытия структур управления. Это означает, что любая вложенная структура должна полностью содержаться внутри следующей внутренней структуры. Например, следующее расположение является недопустимым, так как цикл For завершается раньше внутреннего блока With.
Недопустимое вложение структур For и With
Visual Basic компилятор обнаруживает такие перекрывающиеся структуры управления и сигнализирует об ошибке при компиляции.
См. также
Задачи
Практическое руководство. Передача управления за пределы структуры управления