Sdílet prostřednictvím


Jak: reagovat na události webové odkazy (Visual C#)

Prostředí události definované v VSLangProj a VSLangProj80 jsou specifické pro Visual C# nebo Visual Basic projekty.VSLangProjWebReferencesEventsje nový typ v Visual Studio 2005.Je aktivována, když je přidána či odebrána z webového odkazu nebo jeho vlastnosti jsou upraveny Visual Basic nebo Visual C# projektu.

V tomto příkladu Visual C# připojení pomocí metody zpracování události pro konkrétní projekt VSLangProjWebReferencesEvents vlastnost.

[!POZNÁMKA]

Dialogová okna a příkazy v nabídkách menu, které vidíte, se mohou lišit od těch popsaných v nápovědě, v závislosti na vašich aktivních nastaveních nebo edici.Tyto postupy byly vyvinuty s aktivní Obecné nastavení pro vývoj.Chcete-li změnit nastavení, zvolte Import and Export Settings v menu Nástroje.Další informace naleznete v tématu Nastavení aplikace Visual Studio.

Zpracování události související s odkazy na Web pomocí aplikace Visual C#

  1. Vytvoření Visual Studio přidat projekt v Visual C#.

  2. Na projektu nabídky, klepněte na tlačítko Přidat odkaz na, klepněte .NET kartě vyberte první VSLangProj a VSLangProj80 a klepněte na tlačítko OK.

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

  4. Ve třídě připojit inicializovat proměnné pro zpracování VSLangProjWebReferencesEvents objektu.

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

    V tomto příkladu je název proměnné webRefEvents.

    Jiné objekty automatizace modelu se vztahují na jiné typy událostí, které jsou specifické pro projekt.Například ImportsEvents je aktivována při importu je přidána či odebrána z Imports kolekce.BuildManagerEventsse vztahuje na události týkající se dočasného sestavení z výstupů vlastní nástroje.Další informace o BuildManager objekt, viz Úvod do objektu Správce BuildManager.Úplný seznam událostí, které jsou specifické pro typy projektů, viz Objekty událostí (specifické typy projektů).Seznam Obecná automatické události naleznete v tématu Automatizace objekty událostí.

  5. Přidáte následující způsob volání 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řidáte deklarace metody WebReferenceEventsSample přímo pod OnConnection metoda a následující prohlášení.

    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, je otevřen v projektu Visual Studio integrované vývojové prostředí (IDE) při spuštění v tomto příkladu.Projekt musí být zejména Visual Basic nebo Visual C# projektu, protože VSLangProjWebReferencesEvents objekt je specifický pro tyto typy projektů.

  7. Odevzdaných na projektu VSProject2 přidáním následujícího kódu do metody WebReferenceEventsSample objektu.

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

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

    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řidáte do projektu odkaz na webové služby.

    // 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 k projektu, je nutné nahradit zástupný text <web reference>, kód s URL aktuální webové služby.

    Tento krok způsobí OnAfterWebReferenceAdded událostí na oheň, spustíte-li tento doplněk.

  11. Přidáte postupy pro každou událost související s pod metodu WebReferenceEventsSample objektu události.

    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. Konečně aby se zabránilo Visual Studio od zpomalení systému nadále sledovat události související se okno po ukončení v, zakázat 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);
        }
    }
    

    Kompletní kód je uveden v příkladu v části tohoto tématu.

  13. Chcete-li vytvořit doplněk, klepněte na tlačítko Sestavit řešení na sestavení nabídce.

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

  15. Na Nástroje nabídky, klepněte na tlačítko Správce doplňkůa vyberte doplněk z Správce doplňků dialogové okno.Klepněte na tlačítko OK spustit doplněk.

Testování zpracování událostí VSLangProjWebReferencesEvents

  1. OnAfterWebReferenceAdded Události dojde po při spuštění doplňku, protože v příkladu přidá odkaz na webovou službu programově.

  2. Test OnWebReferenceChanged událostí:

    • Rozbalte Odkazů na webové ve složce Aplikaci Solution Explorer.

    • Vyberte webové služby a pravým tlačítkem myši.

    • Vyberte Vlastnosti z rozevírací nabídky.

    • Na Vlastnosti okna změnit chování URL z dynamického na statické podle výběru statické z Chování URL pole se seznamem.

  3. Test OnBeforeWebReferenceRemoved událostí:

    • Vyberte webové služby a pravým tlačítkem myši.

    • Vyberte Odstranit z rozevírací nabídky.

Příklad

Následující příklad je základní Visual Studio , který ukazuje, jak reagovat na webové odkazy pomocí události Visual Studio automatizace.

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

Tento kód kompilace, vytvořit nový Visual Studio přidat projekt v Visual C# a nahraďte kód třídy připojit kód v příkladu.Informace o spuštění v Postup: ovládání doplňky pomocí Správce doplňků.

Viz také

Úkoly

Jak: reagovat na události webové odkazy (Visual Basic)

Další zdroje

Reakce na události automatizace

Reakce na události (Visual Basic a Visual C# projekty)