With...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 ces 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 ne pouvez lire que les valeurs des membres ou des méthodes invoke. En outre, vous obtenez une erreur si vous tentez d'assigner des valeurs aux membres d'une structure utilisée dans une instruction With...End With.

Syntaxe

With objectExpression
    [ statements ]
End With

Éléments

Terme Définition
objectExpression Obligatoire. Expression qui correspond à un objet. L'expression peut être arbitrairement complexe et n'est évaluée qu'une seule fois. L'expression peut correspondre à tout type de données, y compris des 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 produit par l'évaluation de objectExpression.
End With Obligatoire. Met fin à la définition du bloc With.

Notes

À l'aide de With...End With, vous pouvez exécuter une série d'instructions sur un objet spécifique sans avoir à spécifier plusieurs fois le nom de cet objet. Dans un bloc d'instructions With, vous pouvez spécifier un membre de l'objet en commençant par un point, comme si l'instruction With le précédait.

Par exemple, pour modifier plusieurs propriétés d'un seul objet, placez les instructions d'assignation de propriétés dans le bloc With...End With. Vous ne faites ainsi référence qu'une seule fois à l'objet, au lieu de le faire à chaque assignation de propriété.

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

  • Vous n'avez pas besoin d'évaluer une expression complexe plusieurs fois, ni d'assigner le résultat à une variable temporaire pour faire référence à ses membres à plusieurs reprises.

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

Le type de données de objectExpression peut être un type de classe ou de structure, ou même un type élémentaire Visual Basic, tel que Integer. Si objectExpression est autre chose qu'un objet, vous ne pouvez lire que les valeurs de ses membres ou de ses méthodes invoke. En outre, vous obtenez une erreur si vous tentez d'assigner des valeurs aux membres d'une structure utilisée dans une instruction With...End With. Il s'agit de la même erreur que celle que vous obtenez si vous appelez une méthode qui a retourné une structure et qui a immédiatement accédé à une valeur pour l'assigner à un membre du résultat de la fonction, par exemple GetAPoint().x = 1. Dans les deux cas, le problème vient du fait que la structure existe uniquement dans la pile des appels. Par ailleurs, il n’existe aucun moyen dans ce cas pour qu’un membre de structure modifié puisse écrire dans un emplacement de manière à ce qu’une autre partie du code du programme puisse observer la modification.

objectExpression est évalué une seule fois, à l'entrée dans le bloc. Vous ne pouvez pas réassigner objectExpression à partir de l'intérieur du bloc With.

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

Vous pouvez placer une instruction With...End With dans une autre. Les instructions With...End With imbriquées peuvent prêter à confusion si les objets référencés ne sont pas clairs d'après le contexte. Vous devez fournir une référence qualifiée complète à un objet qui se trouve dans un bloc With externe lorsque l'objet est référencé à partir de l'intérieur d'un bloc With.

Vous ne pouvez pas créer de branche dans un bloc d’instructions With à partir de l’extérieur du bloc.

À moins que le bloc ne contienne une boucle, les instructions ne sont exécutées qu'une seule fois. Vous pouvez imbriquer différentes sortes de structures de contrôle. Pour plus d’informations, consultez Structures de contrôle imbriquées.

Notes

Vous pouvez également utiliser le mot clé With 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 bloc With uniquement pour initialiser les propriétés ou les champs d'un objet que vous venez d'instancier, utilisez plutôt un initialiseur d'objet à la place.

Exemple 1

Dans l'exemple suivant, chaque bloc With 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 imbrique les instructions With…End With. Dans l'instruction With imbriquée, 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