Sdílet prostřednictvím


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 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:

  • 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 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é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

Viz také