巢狀控制結構
更新:2007 年 11 月
您可以在其他控制陳述式中放置控制陳述式,例如在 For...Next 迴圈中放置 If...Then...Else 區塊。在其他控制陳述式 (Statement) 中放置控制陳述式稱為「巢狀」。
巢狀層次
在 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 迴圈 (Loop),而最後一個 Next 陳述式關閉外層 For 迴圈。
同樣的,在巢狀 If 陳述式中,End If 陳述式會自動套用至之前最接近的 If 陳述式。巢狀 Do 迴圈也以相似的形式來運作,它是以最內層的 Loop 陳述式對應至最內層的 Do 陳述式。
在不同種類的控制結構中使用巢狀結構
您可以在其他種類的控制結構內使用巢狀控制結構。下列範例使用 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
重疊控制結構
您不能重疊控制結構。這表示任何巢狀結構都必須完全包含在下一個最內層結構之內。例如,下列安排有效之原因是 For 迴圈在內層 With 區塊結束前結束。
無效的 For 和 With 巢狀結構
Visual Basic 編譯器會偵測此類重疊的控制結構,並發出編譯時期錯誤的訊息。