Поделиться через


Вложенные структуры управления (Visual Basic)

Управляющие конструкции можно поместить в другие управляющие конструкции, например, блок 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 оператору.

Замечание

Для многих структур управления при щелчке ключевого слова выделены все ключевые слова в структуре. Например, при щелчке If в конструкции If...Then...Else выделены все экземпляры If, Then, ElseIf, Else, а также End If в конструкции. Чтобы перейти к следующему или предыдущему выделенному ключевому слову, нажмите клавиши CTRL+SHIFT+СТРЕЛКА ВНИЗ или CTRL+SHIFT+СТРЕЛКА ВВЕРХ.

Вложение различных типов структур управления

Можно вложить одну структуру управления в другую. В следующем примере используется 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 блока.

Схема, показывающая пример недопустимого вложения.

Компилятор Visual Basic обнаруживает такие перекрывающиеся структуры управления и сигнализирует об ошибке во время компиляции.

См. также