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#
Vytvořte projekt doplňku Visual Studio v Visual C#.
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.
Přidejte using VSLangProj; a using VSLangProj80; na začátek souboru Connect.cs.
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.
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); }
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ů.
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;
Načtení objektů událostí z modelu automatizace v metodě WebReferenceEventsSample.
webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
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);
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.
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); }
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.
Pokud chcete sestavit doplněk, klikněte na Sestavit řešení v nabídce Sestavení.
Otevřete projekt Visual C# nebo Visual Basic v integrovaném vývojovém prostředí (IDE) Visual Studio.
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
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ě.
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.
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)