巢狀控制結構 (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 時,建構中的 IfThenElseIfElseEnd 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 區塊終止之前終止。

Diagram that shows an example of invalid nesting.

Visual Basic 編譯器會偵測這類重疊控制結構,並發出編譯時期錯誤訊號。

另請參閱