Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Voert een reeks instructies uit die herhaaldelijk verwijzen naar één object of structuur, zodat de instructies een vereenvoudigde syntaxis kunnen gebruiken bij het openen van leden van het object of de structuur.
Syntaxis
With objectExpression
[ statements ]
End With
Onderdelen
| Termijn | Definitie |
|---|---|
objectExpression |
Verplicht. Een expressie die resulteert in een object. De expressie kan willekeurig complex zijn en wordt slechts één keer geëvalueerd. De expressie kan elk gegevenstype evalueren, inclusief elementaire typen. |
statements |
Facultatief. Een of meer instructies tussen With en End With die kunnen verwijzen naar leden van een object dat is geproduceerd door de evaluatie van objectExpression. |
End With |
Verplicht. Hiermee wordt de definitie van het With blok beëindigd. |
Opmerkingen
Met behulp With...End Withvan kunt u een reeks instructies op een opgegeven object uitvoeren zonder de naam van het object meerdere keren op te geven. Binnen een With instructieblok kunt u een lid van het object opgeven dat begint met een punt, alsof het With instructieobject eraan voorafging.
Als u bijvoorbeeld meerdere eigenschappen voor één object wilt wijzigen, plaatst u de eigenschapstoewijzingsinstructies in het With...End With blok, die slechts eenmaal verwijzen naar het object in plaats van één keer voor elke eigenschapstoewijzing.
Als uw code in meerdere instructies toegang heeft tot hetzelfde object, profiteert u van de volgende voordelen met behulp van de With instructie:
U hoeft een complexe expressie niet meerdere keren te evalueren of het resultaat toe te wijzen aan een tijdelijke variabele om meerdere keren naar de leden ervan te verwijzen.
U kunt uw code beter leesbaar maken door terugkerende in aanmerking komende expressies te elimineren.
Het gegevenstype kan objectExpression elk type klasse of structuur of zelfs een elementair type Visual Basic zijn, zoals Integer. Als objectExpression dit een structuur is, is de mogelijkheid om toe te wijzen aan de leden ervan afhankelijk van of de structuurexpressie kan worden verwezen. U kunt toewijzen aan leden van structuren die rechtstreeks kunnen worden verwezen (zoals variabelen, matrixelementen of velden), maar u krijgt een foutmelding als u waarden probeert toe te wijzen aan leden van structuren die worden geretourneerd door waarde uit functies, eigenschappen of operators, of wanneer haakjes worden gebruikt om verwijzingsbanden te knippen (bijvoorbeeld With (structureVariable)). Dit is dezelfde fout als u een methode aanroept die een structuur heeft geretourneerd en onmiddellijk een waarde heeft geopend en toegewezen aan een lid van het resultaat van de functie, zoals GetAPoint().x = 1. Het probleem in beide gevallen is dat de structuur alleen bestaat op de aanroepstack en er is geen manier waarop een gewijzigd structuurlid in deze situaties naar een locatie kan schrijven, zodat elke andere code in het programma de wijziging kan observeren.
De objectExpression waarde wordt eenmaal geëvalueerd na invoer in het blok. U kunt de objectExpressionWith blokkering niet opnieuw toewijzen.
Binnen een With blok hebt u toegang tot de methoden en eigenschappen van alleen het opgegeven object zonder deze te kwalificeren. U kunt methoden en eigenschappen van andere objecten gebruiken, maar u moet ze kwalificeren met hun objectnamen.
U kunt één With...End With instructie binnen een andere plaatsen. Geneste With...End With instructies kunnen verwarrend zijn als de objecten waarnaar wordt verwezen, niet uit de context worden gewist. U moet een volledig gekwalificeerde verwijzing opgeven naar een object dat zich in een buitenste With blok bevindt wanneer naar het object wordt verwezen vanuit een binnenste With blok.
U kunt niet vertakken naar een With instructieblok van buiten het blok.
Tenzij het blok een lus bevat, worden de instructies slechts één keer uitgevoerd. U kunt verschillende soorten besturingsstructuren nesten. Zie voor meer informatie Geneste besturingsstructuren.
Opmerking
U kunt het With trefwoord ook gebruiken in object-initializers. Zie Object initializers: Benoemde en anonieme typen enanonieme typen en anonieme typen voor meer informatie en voorbeelden.
Als u alleen een With blok gebruikt om de eigenschappen of velden te initialiseren van een object dat u zojuist hebt geïnstantieerd, kunt u in plaats daarvan een object-initialisatiefunctie gebruiken.
Voorbeeld 1
In het volgende voorbeeld voert elk With blok een reeks instructies uit op één object.
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
Voorbeeld 2
In het volgende voorbeeld worden instructies genest With…End With . Binnen de geneste With instructie verwijst de syntaxis naar het binnenste object.
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
Voorbeeld 3
In het volgende voorbeeld ziet u hoe With...End With instructies werken met structuren. U kunt toewijzen aan leden van referentiebare structuren (zoals matrixelementen), maar niet aan structuren die worden geretourneerd door waarde of wanneer haakjes worden gebruikt.
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