With...End With – příkaz (Visual Basic)
Vykoná řadu příkazů, které opakovaně odkazují na jeden objekt nebo strukturu, takže příkazy mohou při přístupu k členům tohoto objektu nebo struktury použít zjednodušenou syntaxi. Při použití struktury můžete číst pouze hodnoty členů nebo vyvolat metody a pokud se pokusíte přiřadit hodnoty členům struktury použité v With...End With
příkazu, zobrazí se chyba.
Syntaxe
With objectExpression
[ statements ]
End With
Součástky
Pojem | definice |
---|---|
objectExpression |
Povinný: Výraz, který se vyhodnotí na objekt. Výraz může být libovolně složitý a vyhodnotí se pouze jednou. Výraz lze vyhodnotit na libovolný datový typ včetně základních typů. |
statements |
Nepovinné. 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 With
můž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:
Nemusíte vyhodnocovat složitý výraz vícekrát ani přiřazovat výsledek k dočasné proměnné, chcete-li na jeho členy odkazovat vícekrát.
Odstraněním opakovaných kvalifikačních výrazů zlepšíte přehlednost kódu.
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
výsledkem je cokoli jiného než objekt, můžete číst pouze hodnoty jeho členů nebo vyvolat metody a pokud se pokusíte přiřadit hodnoty členům struktury použité v With...End With
příkazu, zobrazí se chyba. 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 je v obou případech to, že tato struktura existuje pouze v zásobníku volání a neexistuje žádný způsob, jak člena změněné struktury v těchto situacích zapsat někam tak, aby jakýkoli jiný kód v programu tuto změnu zpozoroval.
Po objectExpression
zadání do bloku se vyhodnotí jednou. Přiřazení z bloku nelze změnit objectExpression
With
.
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ého objektu, musíte je ale kvalifikovat pomocí názvů jejich 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 cyklus, spustí se příkazy pouze jednou. Je možné vnořovat 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