Partager via


Avec... End With, instruction (Visual Basic)

Exécute une série d’instructions qui font référence à plusieurs reprises à un objet ou à une structure unique afin que les instructions puissent utiliser une syntaxe simplifiée lors de l’accès aux membres de l’objet ou de la structure. Lorsque vous utilisez une structure, vous pouvez uniquement lire les valeurs des membres ou appeler des méthodes, et vous obtenez une erreur si vous essayez d’affecter des valeurs aux membres d’une structure utilisée dans une With...End With instruction.

Syntaxe

With objectExpression
    [ statements ]
End With

Pièces

Terme Définition
objectExpression Obligatoire. Expression qui prend la valeur d’un objet. L’expression peut être arbitrairement complexe et n’est évaluée qu’une seule fois. L’expression peut évaluer n’importe quel type de données, y compris les types élémentaires.
statements Optionnel. Une ou plusieurs instructions entre With et End With qui peuvent faire référence aux membres d’un objet généré par l’évaluation de objectExpression.
End With Obligatoire. Termine la définition du With bloc.

Remarques

En utilisant With...End With, vous pouvez effectuer une série d’instructions sur un objet spécifié sans spécifier le nom de l’objet plusieurs fois. Dans un bloc d’instructions With , vous pouvez spécifier un membre de l’objet commençant par un point, comme si l’objet With d’instruction l’a précédé.

Par exemple, pour modifier plusieurs propriétés sur un seul objet, placez les instructions d’affectation de propriété à l’intérieur du With...End With bloc, faisant référence à l’objet une seule fois au lieu d’une seule fois pour chaque affectation de propriété.

Si votre code accède au même objet dans plusieurs instructions, vous bénéficiez des avantages suivants à l’aide de l’instruction With :

  • Vous n’avez pas besoin d’évaluer une expression complexe plusieurs fois ou d’affecter le résultat à une variable temporaire pour faire référence à ses membres plusieurs fois.

  • Vous rendez votre code plus lisible en éliminant les expressions éligibles répétitives.

Le type de données de peut être n’importe objectExpression quel type de classe ou de structure ou même un type élémentaire Visual Basic tel que Integer. En objectExpression cas de résultat autre qu’un objet, vous pouvez uniquement lire les valeurs de ses membres ou appeler des méthodes, et vous obtenez une erreur si vous essayez d’affecter des valeurs aux membres d’une structure utilisée dans une With...End With instruction. Il s’agit de la même erreur que si vous avez appelé une méthode qui a retourné une structure et qui a immédiatement accédé et affecté une valeur à un membre du résultat de la fonction, par GetAPoint().x = 1exemple . Le problème dans les deux cas est que la structure existe uniquement sur la pile des appels, et qu’il n’existe aucun moyen pour un membre de structure modifié dans ces situations peut écrire dans un emplacement de sorte que tout autre code du programme puisse observer la modification.

La objectExpression valeur est évaluée une fois, lors de l’entrée dans le bloc. Vous ne pouvez pas réaffecter à objectExpression partir du With bloc.

Dans un With bloc, vous pouvez accéder aux méthodes et aux propriétés de l’objet spécifié uniquement sans les qualifier. Vous pouvez utiliser des méthodes et des propriétés d’autres objets, mais vous devez les qualifier avec leurs noms d’objets.

Vous pouvez placer une instruction dans une With...End With autre. Les instructions imbriquées peuvent être déroutantes With...End With si les objets référencés ne sont pas clairs du contexte. Vous devez fournir une référence complète à un objet qui se trouve dans un bloc externe With lorsque l’objet est référencé à partir d’un bloc interne With .

Vous ne pouvez pas faire une branche dans un bloc d’instructions With en dehors du bloc.

Sauf si le bloc contient une boucle, les instructions s’exécutent une seule fois. Vous pouvez imbriquer différents types de structures de contrôle. Pour plus d’informations, consultez Structures de contrôle imbriquées.

Remarque

Vous pouvez également utiliser le With mot clé dans les initialiseurs d’objets. Pour plus d’informations et d’exemples, consultez Initialiseurs d’objets : Types nommés et anonymes et types anonymes.

Si vous utilisez un With bloc uniquement pour initialiser les propriétés ou les champs d’un objet que vous venez d’instancier, envisagez plutôt d’utiliser un initialiseur d’objet.

Exemple 1

Dans l’exemple suivant, chaque With bloc exécute une série d’instructions sur un seul objet.

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

Exemple 2

L’exemple suivant imbrication des With…End With instructions. Dans l’instruction imbriquée With , la syntaxe fait référence à l’objet interne.

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

Voir aussi