Partager via


Comment : répondre aux événements des références Web (Visual C#)

Les événements d'environnement définis dans VSLangProj et VSLangProj80 sont spécifiques aux projets Visual C# ou Visual Basic.VSLangProjWebReferencesEvents est un nouveau type dans Visual Studio 2005.Il est déclenché lorsqu'une référence Web est ajoutée ou supprimée, ou lorsque ses propriétés sont modifiées dans un projet Visual Basic ou Visual C#.

Cet exemple utilise Visual C# pour connecter des méthodes de gestion d'événements d'un projet spécifique à l'aide de la propriété VSLangProjWebReferencesEvents.

[!REMARQUE]

Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée.Ces procédures ont été développées avec les paramètres de développement généraux actifs.Pour modifier vos paramètres, choisissez Importation et exportation de paramètres dans le menu Outils.Pour plus d'informations, consultez Paramètres Visual Studio.

Pour gérer des événements liés à des références Web à l'aide de Visual C#

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

  2. Dans le menu Projet, cliquez sur Ajouter une référence, cliquez sur l'onglet .NET, puis sélectionnez les premiers VSLangProj et VSLangProj80. Cliquez ensuite sur OK.

  3. Ajoutez using VSLangProj; et using VSLangProj80; au début du fichier Connect.cs.

  4. Dans la classe Connect, initialisez une variable pour gérer l'objet VSLangProjWebReferencesEvents.

    private DTE2 _applicationObject;
    private AddIn _addInInstance;
    private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
    

    Dans cet exemple, la variable se nomme webRefEvents.

    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. Ajoutez l'appel de méthode suivant à la méthode OnConnection.

    public void OnConnection(object application, 
    ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        // Call the WebReferenceEventsSample method.
        WebReferenceEventsSample (_applicationObject);
    }
    
  6. Ajoutez la déclaration de méthode WebReferenceEventsSample directement sous la méthode OnConnection avec les déclarations suivantes.

    public void WebReferenceEventsSample(DTE2 dte)
    {
        Solution2 soln = (Solution2)_applicationObject.Solution;
        Project proj;
        VSProject2 vsproj;
        String webServiceRef;
        proj = soln.Projects.Item(1);
    }
    

    La déclaration proj = soln.Projects.Item(1); requiert qu'un projet soit ouvert dans l'environnement de développement intégré (IDE) de Visual Studio lorsque vous exécutez cet exemple.En particulier, le projet doit être un projet Visual Basic ou Visual C#, car l'objet VSLangProjWebReferencesEvents est spécifique à ces types de projets.

  7. Effectuez un cast du projet en objet VSProject2 en ajoutant le code suivant à la méthode WebReferenceEventsSample.

    // Get a reference to the VSProject2 object.
    vsproj = (VSProject2)proj.Object;
    
  8. Récupérez les objets événement issus du modèle Automation dans la méthode WebReferenceEventsSample.

    webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
    
  9. Dans la méthode WebReferenceEventsSample, connectez les gestionnaires d'événements.

    webRefEvents.OnAfterWebReferenceAdded += new
     _dispVSLangProjWebReferencesEvents_OnAfterWebReferenceAddedEventHandler
    (webRefEvents_OnAfterWebReferenceAdded);
    webRefEvents.OnBeforeWebReferenceRemoved += new
    _dispVSLangProjWebReferencesEvents_OnBeforeWebReferenceRemovedEventHandler
    (webRefEvents_OnBeforeWebReferenceRemoved);
    webRefEvents.OnWebReferenceChanged += new
     _dispVSLangProjWebReferencesEvents_OnWebReferenceChangedEventHandler
    (webRefEvents_OnWebReferenceChanged);
    
  10. Dans la méthode WebReferenceEventsSample, ajoutez au projet une référence à un service Web.

    // Add a Web reference to the folder.
    // Replace the "<web reference>" with an actual Web service.
    MessageBox.Show("Adding a Web reference.", "Information");
    webServiceRef = "<web reference>";
    vsproj.AddWebReference(webServiceRef);
    

    Pour ajouter par programme une référence à un service Web au projet, vous devez remplacer le texte d'espace réservé, <web reference>, placé dans le code par l'URL d'un véritable service Web.

    Cette étape entraîne le déclenchement de l'événement OnAfterWebReferenceAdded lorsque vous exécutez ce complément.

  11. Ajoutez des procédures pour chaque événement en rapport avec l'objet événement sous la méthode WebReferenceEventsSample.

    void webRefEvents_OnWebReferenceChanged(object pDispatch)
    {
        MessageBox.Show("A Web reference was changed.");
    }
    void webRefEvents_OnBeforeWebReferenceRemoved(object pDispatch)
    {
        MessageBox.Show("A Web reference was removed.");
    }
    void webRefEvents_OnAfterWebReferenceAdded(object pDispatch)
    {
        MessageBox.Show("A Web reference was added." + pDispatch.Name);
    }
    
  12. Enfin, pour empêcher Visual Studio de ralentir votre système en continuant à surveiller les événements liés aux fenêtres une fois le complément fermé, désactivez la gestion des événements dans la méthode OnDisconnection.

    public void OnDisconnection(ext_DisconnectMode disconnectMode,
     ref Array custom)
    {
        // If the delegate handlers have been connected, then 
        // disconnect them here. 
        // If you do not do this, the handlers may still 
        // fire because garbage collection has not removed them.
        if (webRefEvents != null)
        {
            webRefEvents.OnAfterWebReferenceAdded -= new
     _dispVSLangProjWebReferencesEvents
    _OnAfterWebReferenceAddedEventHandler
    (webRefEvents_OnAfterWebReferenceAdded);
            webRefEvents.OnBeforeWebReferenceRemoved -= new
     _dispVSLangProjWebReferencesEvents
    _OnBeforeWebReferenceRemovedEventHandler
    (webRefEvents_OnBeforeWebReferenceRemoved);
            webRefEvents.OnWebReferenceChanged -= new
     _dispVSLangProjWebReferencesEvents
    _OnWebReferenceChangedEventHandler
    (webRefEvents_OnWebReferenceChanged);
        }
    }
    

    Le code complet est présenté dans la section Exemple de cette rubrique.

  13. Pour générer le complément, cliquez sur Générer la solution dans le menu Générer.

  14. Ouvrez un projet Visual C# ou Visual Basic dans l'environnement de développement intégré (IDE) de Visual Studio.

  15. Dans le menu Outils, cliquez sur Gestionnaire de compléments, puis sélectionnez votre complément dans la boîte de dialogue Gestionnaire de compléments.Cliquez sur OK pour exécuter votre complément.

Pour tester la gestion des événements VSLangProjWebReferencesEvents

  1. L'événement OnAfterWebReferenceAdded se déclenche lorsque vous exécutez le complément, car l'exemple ajoute une référence à un service Web par programmation.

  2. Pour tester l'événement OnWebReferenceChanged :

    • Développez le dossier Web References dans l'Explorateur de solutions.

    • Sélectionnez le service Web et cliquez dessus avec le bouton droit.

    • Dans le menu déroulant, sélectionnez Propriétés.

    • Dans la fenêtre Propriétés, faites passer le comportement de l'URL de dynamique à statique en sélectionnant Statique dans la zone de liste déroulante Comportement de l'URL.

  3. Pour tester l'événement OnBeforeWebReferenceRemoved :

    • Sélectionnez le service Web et cliquez dessus avec le bouton droit.

    • Dans le menu déroulant, sélectionnez Supprimer.

Exemple

L'exemple suivant est un complément Visual Studio de base qui montre comment répondre aux événements des références Web à l'aide de l'Automation de Visual Studio.

using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using System.Windows.Forms;
namespace MyAddin
{
public class Connect : Object, IDTExtensibility2
{
    public Connect()
    {
    }
    public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        // Call the WebReferenceEventsSample method.
        WebReferenceEventsSample(_applicationObject);
    }
    public void WebReferenceEventsSample(DTE2 dte)
    {
        try
         {
            Solution2 soln =
 (Solution2)_applicationObject.Solution;
            Project proj;
            VSProject2 vsproj;
            String webServiceRef;
            proj = soln.Projects.Item(1);
            // Get a reference to the VSProject2 object.
            vsproj = (VSProject2)proj.Object;
            //Connect Web references events.
            webRefEvents = 
vsproj.Events2.VSLangProjWebReferencesEvents;
            webRefEvents.OnAfterWebReferenceAdded +=new
 _dispVSLangProjWebReferencesEvents
_OnAfterWebReferenceAddedEventHandler
(webRefEvents_OnAfterWebReferenceAdded);
            webRefEvents.OnBeforeWebReferenceRemoved += new 
_dispVSLangProjWebReferencesEvents
_OnBeforeWebReferenceRemovedEventHandler
(webRefEvents_OnBeforeWebReferenceRemoved);
            webRefEvents.OnWebReferenceChanged += new
 _dispVSLangProjWebReferencesEvents
_OnWebReferenceChangedEventHandler
(webRefEvents_OnWebReferenceChanged);
            // Create a Web references folder.
            MessageBox.Show("Creating a Web references folder."
, "Information");
            vsproj.CreateWebReferencesFolder();
            // Add a Web reference to the folder.
            // Replace the "<web reference>" with an 
            // actual Web service URL.
            MessageBox.Show("Adding a Web reference."
, "Information");
            webServiceRef = "<web reference>";
            vsproj.AddWebReference(webServiceRef);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    void webRefEvents_OnWebReferenceChanged(object pDispatch)
    {
        MessageBox.Show("A Web reference was changed.");
    }
    void webRefEvents_OnBeforeWebReferenceRemoved(object pDispatch)
    {
        MessageBox.Show("A Web reference was removed.");
    }
    void webRefEvents_OnAfterWebReferenceAdded(object pDispatch)
    {
        MessageBox.Show("A Web reference was added.");
    }
    public void OnDisconnection(ext_DisconnectMode disconnectMode,
ref Array custom)
    {
        // If the delegate handlers have been connected, then 
        // disconnect them here. 
        // If you do not do this, the handlers may still 
        // fire because garbage collection has not removed them.
        if (webRefEvents != null)
        {
            webRefEvents.OnAfterWebReferenceAdded -= new
 _dispVSLangProjWebReferencesEvents
_OnAfterWebReferenceAddedEventHandler
 (webRefEvents_OnAfterWebReferenceAdded);
            webRefEvents.OnBeforeWebReferenceRemoved -= new
 _dispVSLangProjWebReferencesEvents
_OnBeforeWebReferenceRemovedEventHandler
(webRefEvents_OnBeforeWebReferenceRemoved);
            webRefEvents.OnWebReferenceChanged -= new
 _dispVSLangProjWebReferencesEvents
_OnWebReferenceChangedEventHandler
(webRefEvents_OnWebReferenceChanged);
        }
    }
    public void OnAddInsUpdate(ref Array custom)
    {
    }
    public void OnStartupComplete(ref Array custom)
    {
    }
    public void OnBeginShutdown(ref Array custom)
    {
    }

    private DTE2 _applicationObject;
    private AddIn _addInInstance;
    private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
    }
}

Compilation du code

Pour compiler ce code, créez un projet de complément Visual Studio dans Visual C#, 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 des références Web (Visual Basic)

Autres ressources

Réponse aux événements d'automation

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