Sdílet prostřednictvím


Postupy: Reagování na události webových odkazů (Visual C#)

Události prostředí definované v VSLangProj a VSLangProj80 jsou specifické pro projekty Visual C# nebo Visual Basic.VSLangProjWebReferencesEvents je nový typ v Visual Studio 2005.Je aktivována, když je webový odkaz přidán či odebrán (pokud dojde k úpravě vlastností) v projektu Visual Basic nebo Visual C#.

V tomto příkladu se používá Visual C# k připojení metod rutin události ke konkrétnímu projektu pomocí vlastnosti VSLangProjWebReferencesEvents.

[!POZNÁMKA]

Váš počítač může zobrazit jiné názvy nebo umístění pro některé prvky uživatelského rozhraní sady Visual Studio v následujících pokynech.Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením.Další informace naleznete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.

Zpracování událostí souvisejících s webovými odkazy v jazyce Visual C#

  1. Vytvořte projekt doplňku Visual Studio v Visual C#.

  2. V nabídce Projekt klepněte na tlačítko Přidat odkaz, klepněte na kartu .NET, vyberte první VSLangProj a VSLangProj80 a klepněte na tlačítko OK.

  3. Přidejte using VSLangProj; a using VSLangProj80; na začátek souboru Connect.cs.

  4. Ve třídě Connect inicializujte proměnnou ke zpracování objektu VSLangProjWebReferencesEvents.

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

    V tomto příkladu je proměnná pojmenována jako webRefEvents.

    Ostatní objekty v modelu automatizace se vztahují na jiné typy událostí, které jsou specifické pro projekt.Například ImportsEvents se vyvolá, když je přidán či odebrán import z kolekce Imports.BuildManagerEvents platí pro události týkající se dočasného sestavení z výstupů vlastních nástrojů.Další informace o objektu BuildManager najdete v tématu Představení objektu BuildManager.Úplný seznam událostí, které jsou specifické pro typy projektů, naleznete v tématu Objekty událostí (specifické pro typy projektů).Seznam obecné automatizace událostí naleznete v tématu Automatizace objektů události.

  5. Přidejte následující volání metody do metody 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. Přidejte deklarace metody WebReferenceEventsSample přímo pod metodu OnConnection s následujícími deklaracemi.

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

    Prohlášení proj = soln.Projects.Item(1); vyžaduje, aby byl projekt otevřen v integrovaném vývojovém prostředí (IDE) Visual Studio při spuštění tohoto příkladu.Projekt musí být zejména v jazycích Visual Basic nebo Visual C#, protože objekt VSLangProjWebReferencesEvents je specifický pro tyto typy projektů.

  7. Přetypujte projekt na objekt VSProject2 přidáním následujícího kódu do metody WebReferenceEventsSample.

    // Get a reference to the VSProject2 object.
    vsproj = (VSProject2)proj.Object;
    
  8. Načtení objektů událostí z modelu automatizace v metodě WebReferenceEventsSample.

    webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
    
  9. V metodě WebReferenceEventsSample připojte obslužné rutiny událostí.

    webRefEvents.OnAfterWebReferenceAdded += new
     _dispVSLangProjWebReferencesEvents_OnAfterWebReferenceAddedEventHandler
    (webRefEvents_OnAfterWebReferenceAdded);
    webRefEvents.OnBeforeWebReferenceRemoved += new
    _dispVSLangProjWebReferencesEvents_OnBeforeWebReferenceRemovedEventHandler
    (webRefEvents_OnBeforeWebReferenceRemoved);
    webRefEvents.OnWebReferenceChanged += new
     _dispVSLangProjWebReferencesEvents_OnWebReferenceChangedEventHandler
    (webRefEvents_OnWebReferenceChanged);
    
  10. V metodě WebReferenceEventsSample přidejte do projektu odkaz na webovou službu.

    // 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);
    

    Chcete-li programově přidat odkaz na webovou službu do projektu, je třeba nahradit zástupný text, <web reference> v kódu adresou URL aktuální webové služby.

    Tento krok způsobí, že se událost OnAfterWebReferenceAdded vyvolá při spuštění tohoto doplňku.

  11. Přidejte postupy pro každou událost související s objektem události pod metodou 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. Nakonec, aby se zabránilo zpomalení systému aplikací Visual Studio tak, že nadále budou sledovány události týkající se oken po zavření doplňku, zakažte zpracování událostí v metodě 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);
        }
    }
    

    Úplný kód je vypsán v oddíle Příklad tohoto tématu.

  13. Pokud chcete sestavit doplněk, klikněte na Sestavit řešení v nabídce Sestavení.

  14. Otevřete projekt Visual C# nebo Visual Basic v integrovaném vývojovém prostředí (IDE) Visual Studio.

  15. V nabídce Nástroje klepněte na tlačítko Správce doplňků a vyberte doplněk z dialogového okna Správce doplňků.Klepněte na tlačítko OK a spusťte tak doplněk.

Chcete-li otestovat zpracování události VSLangProjWebReferencesEvents

  1. Událost OnAfterWebReferenceAdded je spuštěna jednou při spuštění doplňku, protože příklad přidá odkaz na webovou službu programově.

  2. Otestování události OnWebReferenceChanged:

    • Rozbalte složku Webové odkazy v Průzkumníku řešení.

    • Vyberte webovou službu a klepněte na ni pravým tlačítkem.

    • Vyberte možnost Vlastnosti z rozevírací nabídky.

    • V okně Vlastnosti změňte chování adresy URL z dynamického na statické výběrem možnosti Statické v poli se seznamem Chování adresy URL.

  3. Otestování události OnBeforeWebReferenceRemoved:

    • Vyberte webovou službu a klepněte na ni pravým tlačítkem.

    • Vyberte možnost Odstranit z rozevírací nabídky.

Příklad

Následující příklad je základní doplněk Visual Studio, který ukazuje, jak reagovat na webové události odkazů pomocí automatizace 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;
    }
}

Probíhá kompilace kódu

Chcete-li tento kód zkompilovat, vytvořte nový projekt doplňku Visual Studio v Visual C# a nahraďte kód ve třídě Připojit kódem v příkladu.Další informace o spuštění doplňku naleznete v části Postupy: Řízení doplňků pomocí Správce doplňků.

Viz také

Úkoly

Postupy: Reagování na události webových odkazů (Visual Basic)

Další zdroje

Reagování na události automatizace

Reagování na události (projekty Visual Basic a Visual C#)