중첩 제어 구조(Visual Basic)

For...Next 루프 내의 If...Then...Else 블록과 같은 다른 제어 문 내에 제어 문을 배치할 수 있습니다. 다른 제어 문 안에 배치된 제어 문은 중첩된 상태입니다.

중첩 수준

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 루프는 가장 안쪽 Do 문과 일치하는 가장 안쪽 Loop 문과 비슷한 방식으로 작동합니다.

참고 항목

많은 컨트롤 구조의 경우 키워드를 클릭하면 구조체의 모든 키워드가 강조 표시됩니다. 예를 들어 If...Then...Else 생성에서 If을 클릭하면 생성에서 If, Then, ElseIf, ElseEnd If의 모든 인스턴스가 강조 표시됩니다. 강조 표시된 다음 키워드 또는 이전 키워드로 이동하려면 Ctrl+Shift+아래쪽 화살표 또는 Ctrl+Shift+위쪽 화살표를 누릅니다.

다양한 종류의 제어 구조 중첩

한 종류의 컨트롤 구조를 다른 종류 내에 중첩할 수 있습니다. 다음 예제에서는 For Each 루프 내의 With 블록과 With 블록 내의 중첩된 If 블록을 사용합니다.

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  

겹치는 컨트롤 구조

컨트롤 구조는 겹칠 수 없습니다. 즉, 중첩된 구조체는 다음 가장 안쪽 구조 안에 완전히 포함되어야 합니다. 예를 들어 내부 With 블록이 종료되기 전에 For 루프가 종료되기 때문에 다음 정렬이 유효하지 않습니다.

Diagram that shows an example of invalid nesting.

Visual Basic 컴파일러는 이러한 겹치는 제어 구조를 검색하고 컴파일 시간 오류를 신호합니다.

참고 항목