Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Syntax
With objectExpression
[ statements ]
End With
Delar
| Begrepp | Definition |
|---|---|
objectExpression |
Obligatoriskt. 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 |
Obligatoriskt. Avslutar definitionen av With blocket. |
Anmärkningar
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 är en struktur beror möjligheten att tilldela till sina medlemmar på om strukturuttrycket kan refereras. Du kan tilldela till medlemmar i strukturer som är direkt referensbara (till exempel variabler, matriselement eller fält), men du får ett felmeddelande om du försöker tilldela värden till medlemmar i strukturer som returneras av värde från funktioner, egenskaper eller operatorer, eller när parenteser används för att klippa ut referensband (till exempel With (structureVariable)). 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.
Anmärkning
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
Exempel 3
I följande exempel visas hur With...End With instruktioner fungerar med strukturer. Du kan tilldela medlemmar i referensbara strukturer (till exempel matriselement), men inte till strukturer som returneras av värde eller när parenteser används.
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