巢狀控制結構 (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
迴圈的運作方式類似,最內層 Loop
陳述式符合最內層 Do
陳述式。
注意
如果有許多控制結構,當您按一下關鍵字時,結構中的所有關鍵詞都會反白顯示。 例如,當您按一下 If...Then...Else
建構中的 If
時,建構中的 If
、Then
、ElseIf
、Else
和 End 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
重疊控制結構
您無法重疊控制結構。 這表示任何巢狀結構都必須完全包含在下一個最內層結構中。 例如,下列排列順序無效,因為 For
迴圈在內部 With
區塊終止之前終止。
Visual Basic 編譯器會偵測這類重疊控制結構,並發出編譯時期錯誤訊號。