다음을 통해 공유


중첩된 컨트롤 구조(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+위쪽 화살표를 누릅니다.

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

한 종류의 컨트롤 구조를 다른 종류 내에 중첩할 수 있습니다. 다음 예제에서는 루프 내의 WithFor 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 컴파일러는 이러한 겹치는 제어 구조를 검색하고 컴파일 시간 오류를 신호합니다.

참고하십시오