제어문을 다른 제어문 안에 배치할 수 있습니다. 예를 들어 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 컴파일러는 이러한 겹치는 제어 구조를 검색하고 컴파일 시간 오류를 신호합니다.
참고하십시오
.NET