Partager via


Comment : répondre aux événements d'un projet spécifique (Visual Basic)

Le modèle Automation inclut des objets qui peuvent être utilisés pour répondre à des événements d'environnement dans l'environnement de développement intégré (IDE) de Visual Studio. Les événements d'environnement définis dans VSLangProj et VSLangProj80 sont spécifiques aux projets Visual C# et Visual Basic. Par exemple, ImportsEvents est déclenché lorsqu'une instruction import est ajoutée ou supprimée dans une collection Imports.

Cet exemple utilise Visual Basic pour ajouter un gestionnaire d'événements ReferencesEvents (qui est spécifique à un type de projet) à un projet de complément. ReferencesEvents se déclenchent lorsqu'une référence est modifiée, ajoutée ou supprimée dans un projet Visual C# ouVisual Basic.

Notes

Il est possible que pour certains des éléments de l'interface utilisateur de Visual Studio, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués dans les instructions suivantes.Ces éléments dépendent de l'édition de Visual Studio dont vous disposez et des paramètres que vous utilisez.Pour plus d'informations, consultez Paramètres Visual Studio.

Pour gérer des événements liés à une référence à l'aide de Visual Basic

  1. Créez un projet de complément Visual Studio dans Visual Basic.

  2. Ajoutez Imports VSLangProj au début du fichier Connect.vb.

  3. Dans le menu Projet, cliquez sur Ajouter une référence, puis sur l'onglet .NET. Ensuite, sélectionnez le premier VSLangProj, puis cliquez sur OK.

  4. Dans la classe Connect, initialisez une variable pour gérer l'objet ReferencesEvents et une autre pour gérer un OutputWindowPane.

    Public Class Connect
        Implements IDTExtensibility2
        Dim _applicationObject As DTE2
        Dim _addInInstance As AddIn
        ' Handle Reference events.
        Public WithEvents refEvents As VSLangProj.ReferencesEvents
        Private outputWinPane As OutputWindowPane
    

    Dans cet exemple, la variable se nomme refEvents.

    D'autres objets présents dans le modèle Automation sont en rapport avec d'autres types d'événements spécifiques au projet. Par exemple, ImportsEvents est déclenché lorsqu'une instruction import est ajoutée ou supprimée dans une collection Imports. BuildManagerEvents s'applique aux événements liés aux assemblys temporaires créés à partir des sorties d'outils personnalisés. Pour plus d'informations sur l'objet BuildManager, consultez Introduction à l'objet BuildManager. Pour obtenir la liste complète des événements spécifiques aux types de projets, consultez Objets événement (spécifiques aux types de projets). Pour obtenir la liste des événements Automation généraux, consultez Objets événement d'automation.

  5. Dans la méthode OnConnection, initialisez une variable pour intercepter des événements. Dans cet exemple, la variable se nomme events.

        Dim events As EnvDTE80.Events2
        events = CType(_applicationObject.Events, Events2)
    
  6. Dans la méthode OnConnection, initialisez une variable OutputWindow.

        Dim outputWindow As OutputWindow
        outputWindow = CType(_applicationObject.Windows.Item _
        (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow)
        outputWinPane = outputWindow.OutputWindowPanes.Add_
        ("Reference Event Information ")
    
  7. Par ailleurs, dans la méthode OnConnection, récupérez les objets événement issus du modèle Automation.

    refEvents = CType(events.GetObject("CSharpReferencesEvents"),_
     ReferencesEvents)
    

    Visual Studio connecte automatiquement le gestionnaire de méthodes car la déclaration de la variable objet utilise le gestionnaire WithEvents (Visual Basic).

    Dans cet exemple, les ReferencesEvents sont spécifiques aux projets Visual C#. Pour répondre aux événements spécifiques aux événements Visual Basic, remplacez la chaîne CSharpReferencesEvents par VBReferencesEvents. Pour plus d'informations sur la manière de déterminer les chaînes à utiliser pour des événements spécifiques aux types différents de projets, consultez Objets événement (spécifiques aux types de projets).

  8. Ajoutez des procédures pour chaque événement en rapport avec l'objet événement. Par exemple, pour gérer l'événement qui se produit lorsqu'une référence est ajoutée, vous utiliserez :

    Sub ReferenceAdded(ByVal addedRef As VSLangProj.Reference)_
        Handles refEvents.ReferenceAdded
        outputWinPane.OutputString_
        ("ReferencesEvents.ReferenceAdded" & ControlChars.Lf)
        outputWinPane.OutputString("The reference to " _
        & addedRef.Name & " was added." & ControlChars.Lf)
    End Sub
    

    Dans le cas de ReferencesEvents, les événements doivent être définis pour ReferenceAdded, ReferenceRemoved et ReferenceChanged, comme indiqué dans la liste complète de l'exemple ci-dessous.

  9. Enfin, pour empêcher Visual Studio de ralentir votre système en continuant à surveiller les événements associés à des fenêtres une fois le complément fermé, vous devez désactiver la gestion des événements. Dans Visual Basic, vous devez, pour ce faire, affecter la valeur Nothing au gestionnaire d'événements.

    Public Sub OnDisconnection(ByVal RemoveMode As_
     Extensibility.ext_DisconnectMode, ByRef custom As System.Array)_
     Implements Extensibility.IDTExtensibility2.OnDisconnection
        refEvents = Nothing
    End Sub
    

    La gestion des événements est alors désactivée si le complément ou l'IDE est arrêté tandis que le complément est encore en cours d'exécution. Une fois l'IDE arrêté, tous les compléments en cours d'exécution sont fermés automatiquement en premier.

Exemple

L'exemple suivant est un complément Visual Studio de base qui montre comment intercepter et gérer des événements de référence Visual C# dans Visual Studio. Dès qu'un événement de référence se produit, un message de notification est envoyé à la fenêtre Sortie.

Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj

Public Class Connect
    Implements IDTExtensibility2
    Dim _applicationObject As DTE2
    Dim _addInInstance As AddIn
    ' Handle Reference events.
    Public WithEvents refEvents As VSLangProj.ReferencesEvents
    Private outputWinPane As OutputWindowPane
Public Sub OnBeginShutdown(ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnBeginShutdown
End Sub

Public Sub OnAddInsUpdate(ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
End Sub

Public Sub OnStartupComplete(ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnStartupComplete
End Sub

Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnDisconnection
    ' Turns off reference event handling when the add-in shuts down.
    refEvents = Nothing
End Sub

Public Sub OnConnection(ByVal application As Object, _
 ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef _
 custom As System.Array) Implements _
 Extensibility.IDTExtensibility2.OnConnection

    _applicationObject = CType(application, EnvDTE80.DTE2)
    _addInInstance = CType(addInInst, EnvDTE.AddIn)

    Dim events As EnvDTE80.Events2
    events = CType(_applicationObject.Events, Events2)
    ' Send event messages to the Output window.
    Dim outputWindow As OutputWindow
    outputWindow = CType(_applicationObject.Windows.Item _
    (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow)
    outputWinPane = outputWindow.OutputWindowPanes.Add _
    ("Reference Event Information ")

    ' Retrieve the event objects from the automation model.
    ' Visual Basic automatically connects the method handler since 
    ' the object variable declaration uses the 'WithEvents' handler.
    refEvents = CType(events.GetObject("CSharpReferencesEvents"), _
    ReferencesEvents)
End Sub
    ' Handle all of the various reference-related events.
    Sub ReferenceRemoved(ByVal removedRef As VSLangProj.Reference) _
    Handles refEvents.ReferenceRemoved
    outputWinPane.OutputString("ReferencesEvents.ReferenceRemoved" _
    & ControlChars.Lf)
    outputWinPane.OutputString("The reference to " & removedRef.Name _
    & " was removed." & ControlChars.Lf)
End Sub

Sub ReferenceChanged(ByVal changedRef As VSLangProj.Reference) _
    Handles refEvents.ReferenceChanged
    outputWinPane.OutputString("ReferencesEvents.ReferenceChanged" _
    & ControlChars.Lf)
    outputWinPane.OutputString("The reference to " & changedRef.Name _
    & " was changed." & ControlChars.Lf)
End Sub
Sub ReferenceAdded(ByVal addedRef As VSLangProj.Reference) _
    Handles refEvents.ReferenceAdded
    outputWinPane.OutputString("ReferencesEvents.ReferenceAdded" _
    & ControlChars.Lf)
    outputWinPane.OutputString("The reference to " & addedRef.Name _
    & " was added." & ControlChars.Lf)
End Sub

End Class

Compilation du code

Pour compiler ce code, créez un projet de complément Visual Studio dans Visual Basic, puis remplacez le code de la classe Connect par le code de l'exemple. Pour plus d'informations sur l'exécution d'un complément, consultez Comment : contrôler des compléments avec le Gestionnaire de compléments.

Voir aussi

Tâches

Comment : répondre aux événements d'un projet spécifique (Visual C#)

Référence

Imports, instruction (espace de noms et type .NET)

Autres ressources

Réponse aux événements d'automation

Réponse aux événements (projets Visual Basic et Visual C#)