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 lze pouze číst hodnoty členů nebo vyvolávat metody. Pokud se členům struktury použité v příkazu With...End With pokusíte přiřadit hodnoty, zobrazí se chyba.

With objectExpression
    [ statements ]
End With

Součásti

Termín

Definice

objectExpression

Požadováno.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

Volitelné.Jeden nebo více příkazů mezi With a End With, které mohou odkazovat na členy objektu vzniklého vyhodnocením objectExpression

End With

Požadováno.Ukončuje definici bloku With.

Poznámky

Pomocí With...End With lze na určeném objektu vykonávat řadu příkazů, aniž je třeba vícekrát zadávat název tohoto objektu.Uvnitř bloku příkazu With můžete určit člen objektu začínající tečkou, jako by před ním byl objekt příkazu With.

Chcete-li například změnit více vlastností jednoho objektu, můžete příkazy pro přiřazení vlastnosti umístit dovnitř bloku With...End With a odkázat na tento objekt pouze jednou a ne u každého přiřazení vlastnosti.

Pokud váš kód přistupuje ke stejnému objektu ve více příkazech, získáte při použití 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á třída či typ struktury, nebo dokonce základní typ jazyka Visual Basic, například Integer. Pokud je výsledkem objectExpression cokoli jiného než objekt, můžete pouze číst hodnoty jeho členů nebo vyvolávat metody. Pokud se členům struktury použité v příkazu With...End With pokusíte přiřadit hodnoty, zobrazí se chyba. Jedná se o stejnou chybu, která by se zobrazila, kdybyste vyvolali metodu, která vrátila strukturu, a okamžitě zpřístupnili a přiřadili hodnotu některému členu výsledku této 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.

objectExpression se vyhodnotí jednou při vstupu do bloku.Uvnitř bloku With nelze objectExpression znovu přiřadit.

Uvnitř bloku With lze bez kvalifikování zpřístupnit metody a vlastnosti pouze zadaného objektu.Můžete použít metody a vlastnosti jiného objektu, musíte je ale kvalifikovat pomocí názvů jejich objektů.

Jeden příkaz With...End With můžete vnořit do jiného.Vnořené příkazy With...End With mohou být matoucí, pokud objekty, na které se odkazuje, nejsou zřejmé z kontextu.Musíte zadat plně kvalifikovaný odkaz na objekt, který je ve vnějším bloku With, pokud je tento objekt odkazován z vnitřního bloku With.

Do bloku příkazu With nelze větvit z vnějšku tohoto bloku.

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 (Visual Basic).

[!POZNÁMKA]

Klíčové slovo With lze použít také v inicializátorech objektu.Další informace a příklady naleznete v tématech Inicializátory objektů: pojmenované a anonymní typy (Visual Basic)Anonymní typy (Visual Basic).

Pokud blok With používáte pouze k inicializaci vlastností nebo polí objektu, jehož instanci jste právě vytvořili, zvažte místo toho použít inicializátor objektu.

Příklad

V následujícím příkladu vykonává každý blok With řadu příkazů u jednoho 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

Následující příklad používá vnořené příkazy With…End With.Uvnitř vnořeného příkazu With odkazuje syntaxe 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é

Referenční dokumentace

List

Koncepty

Vnořené řídicí struktury (Visual Basic)

Inicializátory objektů: pojmenované a anonymní typy (Visual Basic)

Anonymní typy (Visual Basic)