Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Spustí řadu příkazů, které opakovaně odkazují na jeden objekt nebo strukturu, aby příkazy mohly používat zjednodušenou syntaxi při přístupu ke členům objektu nebo struktury.
Syntaxe
With objectExpression
[ statements ]
End With
Součástky
| termín | Definice |
|---|---|
objectExpression |
Povinné. Výraz, který se vyhodnotí jako objekt. Výraz může být libovolně složitý a je vyhodnocen pouze jednou. Výraz se může vyhodnotit na libovolný datový typ, včetně základních typů. |
statements |
Volitelný. Jeden nebo více tvrzení mezi With a End With které mohou odkazovat na členy objektu, který je vytvořen vyhodnocením objectExpression. |
End With |
Povinné. Ukončí definici With bloku. |
Poznámky
Pomocí , With...End Withmůžete provést řadu příkazů u zadaného objektu bez zadání názvu objektu vícekrát.
With V rámci bloku příkazu můžete zadat člen objektu začínající tečkou, jako by With objekt příkazu před ním.
Pokud chcete například změnit více vlastností na jednom objektu, umístěte příkazy přiřazení vlastností do With...End With bloku a odkazujte na objekt pouze jednou místo jednou pro každé přiřazení vlastnosti.
Pokud váš kód přistupuje ke stejnému objektu ve více příkazech, získáte pomocí příkazu With následující výhody:
Složitý výraz nemusíte vyhodnocovat vícekrát nebo přiřazovat výsledek dočasné proměnné, aby odkazovala na její členy vícekrát.
Kód je čitelnější odstraněním opakovaných opravňujících výrazů.
Datový typ objectExpression může být libovolný typ třídy nebo struktury nebo dokonce základní typ jazyka Visual Basic, například Integer. Pokud objectExpression je struktura, schopnost přiřadit ke svým členům závisí na tom, zda je výraz struktury odkazovatelný. Můžete je přiřadit členům struktur, které jsou přímo odkazovatelné (například proměnné, prvky matice nebo pole), ale pokud se pokusíte přiřadit hodnoty členům struktur, které jsou vráceny hodnotou z funkcí, vlastností nebo operátorů, nebo při použití závorek k vyjmutí odkazů (například With (structureVariable)). Jedná se o stejnou chybu, kterou byste získali v případě, že jste vyvolali metodu, která vrátila strukturu a okamžitě získala přístup k hodnotě členovi výsledku funkce, například GetAPoint().x = 1. Problémem v obou případech je, že struktura existuje pouze v zásobníku volání a v těchto situacích neexistuje způsob, jak může člen změněné struktury zapisovat do umístění tak, aby jakýkoli jiný kód v programu mohl sledovat změnu.
Po objectExpression zadání do bloku se vyhodnotí jednou. Přiřazení z bloku nelze změnit objectExpressionWith .
With V rámci bloku můžete přistupovat k metodám a vlastnostem pouze zadaného objektu, aniž byste je opravili. Můžete použít metody a vlastnosti jiných objektů, ale musíte je kvalifikovat s jejich názvy objektů.
Jeden příkaz můžete umístit With...End With do jiného. Vnořené With...End With příkazy můžou být matoucí, pokud objekty, na které se odkazuje, nejsou jasné z kontextu. Musíte zadat plně kvalifikovaný odkaz na objekt, který je ve vnějším With bloku, když je objekt odkazován z vnitřního With bloku.
Nemůžete vytvořit větev do With bloku příkazu mimo blok.
Pokud blok neobsahuje smyčku, příkazy se spustí pouze jednou. Můžete vnořit různé druhy řídicích struktur. Další informace naleznete v tématu Vnořené řídicí struktury.
Poznámka:
Klíčové slovo můžete použít With také v inicializátorech objektů. Další informace a příklady naleznete v tématu Inicializátory objektů: Pojmenované a Anonymní typy a Anonymní typy.
Pokud k inicializaci vlastností nebo polí objektu, který jste právě vytvořili, používáte With blok, zvažte místo toho použití inicializátoru objektu.
Příklad 1
V následujícím příkladu každý With blok provede řadu příkazů na jednom objektu.
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
Příklad 2
Následující příklad vnořuje příkazy With…End With . V rámci vnořeného With příkazu syntaxe odkazuje na vnitřní objekt.
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
Příklad 3
Následující příklad ukazuje, jak With...End With příkazy pracují se strukturami. Ke členům odkazovatelných struktur (například prvků pole), ale ne ke strukturám vráceným hodnotou nebo při použití závorek.
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