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 lze číst pouze hodnoty členů nebo vyvolat metody a při pokusu o přiřazení hodnot členům struktury použité v příkazu se zobrazí chyba With...End With .

Syntax

With objectExpression
    [ statements ]
End With

Součásti

Pojem Definice
objectExpression Povinná hodnota. 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ý parametr. Jeden nebo více příkazů mezi With a End With , které mohou odkazovat na členy objektu, který je vytvořen vyhodnocením objectExpression .
End With Povinná hodnota. Ukončí definici With bloku.

Poznámky

Pomocí With...End With můžete provést sérii příkazů na zadaném objektu bez zadání názvu objektu vícekrát. V rámci With bloku příkazu můžete určit člena objektu začínajícího tečkou, jako by byl With před ním uveden objekt příkazu.

Chcete-li například změnit více vlastností na jednom objektu, umístěte příkazy přiřazení vlastností dovnitř With...End With bloku a odkaz na objekt pouze 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 následující výhody pomocí With příkazu:

  • 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 i Visual Basic základní typ, jako je Integer . Pokud je objectExpression výsledkem cokoli jiného než objekt, můžete číst pouze hodnoty jeho členů nebo vyvolat metody a při pokusu o přiřazení hodnot členům struktury použité v příkazu se zobrazí chyba With...End With . Jedná se o stejnou chybu, která by se vám měla zobrazit, pokud jste vyvolali metodu, která vrátila strukturu a hned k ní přistupovala hodnotu a přiřadili ji členu výsledku funkce, jako je 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.

objectExpressionJe vyhodnocen jednou při vstupu do bloku. Nemůžete znovu přiřadit v objectExpression rámci With bloku.

V rámci With bloku máte přístup k metodám a vlastnostem pouze zadaného objektu, aniž byste je museli kvalifikovat. 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 mohou být matoucí, pokud objekty, na které se říkáte, nejsou jasné z kontextu. Je nutné zadat plně kvalifikovaný odkaz na objekt, který je uvnitř vnějšího With bloku, pokud je objekt odkazován z vnitřního With bloku.

Do bloku příkazu nemůžete vytvořit větev With 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 najdete v tématu vnořené řídicí struktury.

Poznámka

Klíčové slovo lze 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 používáte With blok pouze k inicializaci vlastností nebo polí objektu, který jste právě vytvořili, zvažte místo toho použití inicializátoru objektu.

Příklad 1

V následujícím příkladu každý With blok provádí sérii 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řování With…End With příkazů. 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é