Med... Avsluta med -instruktion (Visual Basic)

Kör en serie instruktioner som upprepade gånger refererar till ett enskilt objekt eller en enda struktur så att uttrycken kan använda en förenklad syntax vid åtkomst till medlemmar i objektet eller strukturen. När du använder en struktur kan du bara läsa värdena för medlemmar eller anropa metoder, och du får ett fel om du försöker tilldela värden till medlemmar i en struktur som används i en With...End With -instruktion.

Syntax

With objectExpression
    [ statements ]
End With

Delar

Period Definition
objectExpression Obligatoriska. Ett uttryck som utvärderas till ett objekt. Uttrycket kan vara godtyckligt komplext och utvärderas bara en gång. Uttrycket kan utvärderas till valfri datatyp, inklusive elementära typer.
statements Valfritt. En eller flera instruktioner mellan With och End With som kan referera till medlemmar i ett objekt som skapas av utvärderingen av objectExpression.
End With Obligatoriska. Avslutar definitionen av With blocket.

Kommentarer

Med hjälp With...End Withav kan du utföra en serie instruktioner på ett angivet objekt utan att ange namnet på objektet flera gånger. I ett With instruktionsblock kan du ange en medlem i objektet som börjar med en punkt, som om instruktionsobjektet With föregick det.

Om du till exempel vill ändra flera egenskaper för ett enskilt objekt placerar du egenskapstilldelningsinstruktionerna With...End With i blocket och refererar bara till objektet en gång i stället för en gång för varje egenskapstilldelning.

Om koden kommer åt samma objekt i flera instruktioner får du följande fördelar med hjälp av -instruktionen With :

  • Du behöver inte utvärdera ett komplext uttryck flera gånger eller tilldela resultatet till en tillfällig variabel för att referera till dess medlemmar flera gånger.

  • Du gör koden mer läsbar genom att eliminera repetitiva kvalificerande uttryck.

Datatypen objectExpression kan vara vilken klass eller strukturtyp som helst eller till och med en elementär visualiseringstyp, till Integerexempel . Om objectExpression resulterar i något annat än ett objekt kan du bara läsa värdena för dess medlemmar eller anropa metoder, och du får ett fel om du försöker tilldela värden till medlemmar i en struktur som används i en With...End With -instruktion. Det här är samma fel som du skulle få om du anropade en metod som returnerade en struktur och omedelbart fick åtkomst till och tilldelade ett värde till en medlem i funktionens resultat, till exempel GetAPoint().x = 1. Problemet i båda fallen är att strukturen bara finns på anropsstacken, och det finns inte en chans att en modifierad strukturmedlem i dessa situationer kan skriva till en plats så att någon annan kod i programmet kan observera ändringen.

objectExpression Utvärderas en gång, vid inträde i blocket. Du kan inte omtilldela objectExpression inifrån With blocket.

I ett With block kan du bara komma åt metoderna och egenskaperna för det angivna objektet utan att kvalificera dem. Du kan använda metoder och egenskaper för andra objekt, men du måste kvalificera dem med deras objektnamn.

Du kan placera en instruktion i en With...End With annan. Kapslade With...End With instruktioner kan vara förvirrande om de objekt som refereras till inte är tydliga från kontexten. Du måste ange en fullständigt kvalificerad referens till ett objekt som finns i ett yttre With block när objektet refereras inifrån ett inre With block.

Du kan inte förgrena dig till ett With instruktionsblock utanför blocket.

Om inte blocket innehåller en loop körs uttrycken bara en gång. Du kan kapsla olika typer av kontrollstrukturer. Mer information finns i Kapslade kontrollstrukturer.

Kommentar

Du kan också använda nyckelordet With i objektinitierare. Mer information och exempel finns i Objektinitierare: Namngivna och anonyma typer och anonyma typer.

Om du bara använder ett With block för att initiera egenskaperna eller fälten för ett objekt som du just har instansierat kan du överväga att använda en objektinitierare i stället.

Exempel 1

I följande exempel kör varje With block en serie instruktioner på ett enda objekt.

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

Exempel 2

Följande exempel kapslar With…End With instruktioner. I den kapslade With instruktionen refererar syntaxen till det inre objektet.

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

Se även