共用方式為


跟。。。結束語句 (Visual Basic)

執行一系列的語句,重複參考單一對象或結構,讓語句可以在存取對象或結構的成員時使用簡化的語法。

語法

With objectExpression
    [ statements ]
End With

組件

術語 定義
objectExpression 必須的。 評估為對象的表達式。 表達式可能任意複雜,而且只會評估一次。 表達式可以評估為任何數據類型,包括基本型別。
statements 選擇性。 和 With 之間的End With一或多個語句,可能會參考 評估 所產生的objectExpression對象成員。
End With 必須的。 終止 區塊的定義 With

備註

藉由使用 With...End With,您可以在指定的物件上執行一系列語句,而不需多次指定對象的名稱。 With在語句區塊中,您可以指定以句號開頭的對象成員,就像語句物件前面一樣With

例如,若要變更單一物件上的多個屬性,請將屬性指派語句放在 區塊內 With...End With ,只參考物件一次,而不是針對每個屬性指派一次。

如果您的程式代碼在多個語句中存取相同的物件,您可以使用 語句來取得下列優點 With

  • 您不需要多次評估複雜表達式,或將結果指派給暫存變數,以多次參考其成員。

  • 您可以藉由消除重複的限定表達式,讓您的程式代碼更容易閱讀。

的數據類型 objectExpression 可以是任何類別或結構類型,甚至是 Visual Basic 基本類型,例如 Integer。 如果是結構,則 objectExpression 指派給其成員的能力取決於結構運算式是否可參考。 您可以指派給可直接參考的結構成員 (例如變數、陣列元素或欄位) ,但如果您嘗試將值指派給函數、屬性或運算子的值所傳回的結構成員,或使用括弧來切斷參照繫結 (例如 With (structureVariable))。 如果您叫用傳回結構的方法,並立即存取並將值指派給函式結果的成員, GetAPoint().x = 1例如 ,則會收到的錯誤相同。 在這兩種情況下,問題在於結構只存在於呼叫堆棧上,而且在這些情況下,修改過的結構成員無法寫入位置,讓程式中的任何其他程序代碼都能觀察變更。

objectExpression在進入 區塊時,會評估一次 。 您無法從區塊內objectExpression重新指派 With

With 區塊中,您可以只存取指定物件的方法和屬性,而不需要限定這些物件。 您可以使用其他物件的方法和屬性,但您必須使用其物件名稱來限定它們。

您可以將一個語句放在另一個 With...End With 語句內。 如果所參考的對象無法從內容中清楚瞭解,巢狀 With...End With 語句可能會造成混淆。 當物件從內部With區塊內參考時,您必須提供外部With區塊中物件的完整參考。

您無法從 區塊外部分支至 With 語句區塊。

除非 區塊包含迴圈,否則語句只會執行一次。 您可以將不同類型的控件結構巢狀化。 如需詳細資訊,請參閱 巢狀控件結構

備註

您也可以在物件初始化運算式中使用 With 關鍵詞。 如需詳細資訊和範例,請參閱 物件初始化表達式:具名和匿名型 別和 匿名型別

如果您只使用 With 區塊來初始化剛剛具現化之對象的屬性或欄位,請考慮改用物件初始化表達式。

範例 1

在下列範例中,每個 With 區塊都會在單一 對象上執行一系列的語句。

Private Sub AddCustomer()
    Dim theCustomer As New Customer

    With theCustomer
        .Name = "Coho Vineyard"
        .URL = "http://www.cohovineyard.com/"
        .City = "Redmond"
    End With

    With theCustomer.Comments
        .Add("First comment.")
        .Add("Second comment.")
    End With
End Sub

Public Class Customer
    Public Property Name As String
    Public Property City As String
    Public Property URL As String

    Public Property Comments As New List(Of String)
End Class

範例 2

下列範例會巢狀 With…End With 語句。 在巢狀 With 語句內,語法會參考內部物件。

Dim theWindow As New EntryWindow

With theWindow
    With .InfoLabel
        .Content = "This is a message."
        .Foreground = Brushes.DarkSeaGreen
        .Background = Brushes.LightYellow
    End With

    .Title = "The Form Title"
    .Show()
End With

範例 3

下列範例示範陳述式如何 With...End With 與結構搭配使用。 您可以指派給可參考結構的成員 (例如陣列元素),但不能指派給值傳回的結構,或使用括弧時。

Private Sub DemonstrateStructureWithStatement()
    ' Create an array of structures - this is referenceable
    Dim points(2) As Point

    ' Valid: Array elements are referenceable, so assignments work
    With points(0)
        .X = 10
        .Y = 20
    End With

    ' Create a single structure variable - this is also referenceable
    Dim singlePoint As Point
    With singlePoint
        .X = 30
        .Y = 40
    End With

    ' Invalid: Using parentheses cuts reference ties
    ' With (points(0))
    '     .X = 50  ' This would cause BC30068 error
    '     .Y = 60
    ' End With

    ' Invalid: Function returns by value, not referenceable
    ' With GetPoint()
    '     .X = 70  ' This would cause BC30068 error
    '     .Y = 80
    ' End With
End Sub

Private Function GetPoint() As Point
    Return New Point With {.X = 1, .Y = 2}
End Function

Private Structure Point
    Public X As Integer
    Public Y As Integer
End Structure

另請參閱