Sdílet prostřednictvím


Jak: reagovat na události v konkrétní projekt (Visual C#)

Automatizace modelu obsahuje objekty, které lze reagovat na události prostředí v Visual Studio integrované vývojové prostředí (IDE).Prostředí události definované v VSLangProj a VSLangProj80 jsou specifické pro Visual C# a Visual Basic projekty.Například ImportsEvents je aktivována při importu je přidána či odebrána z Visual Basic projektu.

V tomto příkladu Visual C# přidat ReferencesEvents obslužnou rutinu události, které je specifické pro typ projektu přidat do projektu.ReferencesEventsje aktivována při změně, přidány do nebo z odkazu Visual C# nebo Visual Basic projektu.

[!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.

Referenční zpracování událostí pomocí aplikace Visual C#

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

  2. Přidat using VSLangProj; na začátek souboru Connect.cs.

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

  4. Ve třídě připojit inicializovat proměnné pro zpracování ReferencesEvents objektu a další zpracování OutputWindowPane.

        private DTE2 _applicationObject;
        private AddIn _addInInstance;
        private VSLangProj.ReferencesEvents refEvents;
        private OutputWindowPane outputWinPane;
    

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

    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ů)a seznam obecné automatické události, viz Automatizace objekty událostí.

  5. V OnConnection metody je proměnná zachytit události initialize.Například proměnná nazývá events.

    EnvDTE80.Events2 events = 
    (EnvDTE80.Events2)_applicationObject.Events;
    
  6. V OnConnection metodu inicializace OutputWindow proměnné.

    OutputWindow outputWindow = (OutputWindow)_applicationObject.Windows.Item
    (Constants.vsWindowKindOutput).Object;
    outputWinPane = outputWindow.OutputWindowPanes.Add
    ("ReferencesEvents Event Information");
    
  7. Také v OnConnection metodu načtení objektů událostí z automatizace modelu.

    refEvents = 
    (VSLangProj.ReferencesEvents)events.GetObject
    ("CSharpReferencesEvents");
    

    V tomto příkladu ReferencesEvents jsou specifické pro Visual C# projekty.Odpovědět na Visual Basic určité události nahradit řetězec, CSharpReferencesEvents, s VBReferencesEvents.Další informace o určení řetězce pro události, které jsou specifické pro různé typy projektů, viz Objekty událostí (specifické typy projektů).

  8. Každý delegát vystavena z objektů událostí v kroku 3 načíst pomocí operátor += připojení.Například k připojení Delegáti vystavený ReferenceAdded událostí, můžete použít:

    refEvents.ReferenceAdded += new 
    _dispReferencesEvents_ReferenceAddedEventHandler
    (this.ReferenceAdded);
    
  9. Přidáte postupy pro každé události vztahující se k objektu události.Například ke zpracování události, která nastane při přidání odkazu použijete:

    public void ReferenceAdded( VSLangProj.Reference addedRef ) 
    { 
        outputWinPane.OutputString( "ReferencesEvents.ReferenceAdded" 
    + "\n" ); 
        outputWinPane.OutputString( "The reference to " + addedRef.Name
     + " was added." + "\n" ); 
    }
    

    U ReferencesEvents, musí mít události definované pro:

    and

    Úplný seznam níže uvedený příklad zahrnuje tyto události.

  10. Konečně aby se zabránilo Visual Studio od nadále sledovat události související se okno po ukončení doplněk zpomalení systému, měli byste zakázat zpracování událostí.V Visual C# to pomocí operátoru-=.Například k zakázání zpracování událostí pro ReferenceAdded použijete:

    refEvents.ReferenceAdded -= new
     _dispReferencesEvents_ReferenceAddedEventHandler
    (this.ReferenceAdded);
    

    Vypne se zpracování událostí zda doplněk nebo IDE vypnutí doplněk při běhu.Při vypnutí IDE všechny spuštěné doplňky automaticky ukončeny první.

Příklad

Následující příklad je základní Visual Studio , který ukazuje, jak zachytit a zpracovat Visual C# události v referenční Visual Studio.Vždy, když dojde k události odkaz, je odeslána oznámení Výstup okna.

using System;
using Microsoft.VisualStudio.CommandBars;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using VSLangProj;

public Connect()
  {
  }
  public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
  {
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;

    // Retrieve the event objects from the automation model.
    EnvDTE80.Events2 events = 
(EnvDTE80.Events2)_applicationObject.Events;
    // Send event messages to the Output window.
    OutputWindow outputWindow =
 (OutputWindow)_applicationObject.Windows.Item
(Constants.vsWindowKindOutput).Object;
    outputWinPane = 
outputWindow.OutputWindowPanes.Add
("ReferencesEvents Event Information");

    // Retrieve the event objects from the automation model.
    refEvents = (VSLangProj.ReferencesEvents)
events.GetObject("CSharpReferencesEvents");

    // Connect to each delegate exposed from each object 
    // retrieved above.
    refEvents.ReferenceAdded += new
 _dispReferencesEvents_ReferenceAddedEventHandler
(this.ReferenceAdded);
    refEvents.ReferenceChanged += new
 _dispReferencesEvents_ReferenceChangedEventHandler
(this.ReferenceChanged);
    refEvents.ReferenceRemoved += new
 _dispReferencesEvents_ReferenceRemovedEventHandler
(this.ReferenceRemoved); 
  }

  public void OnDisconnection(Extensibility.ext_DisconnectMode
 disconnectMode, ref System.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 they have not been garbage collected.
    if (refEvents != null)
    {
        refEvents.ReferenceAdded -= new
 _dispReferencesEvents_ReferenceAddedEventHandler
(this.ReferenceAdded);
        refEvents.ReferenceChanged -= new
 _dispReferencesEvents_ReferenceChangedEventHandler
(this.ReferenceChanged);
        refEvents.ReferenceRemoved -= new
 _dispReferencesEvents_ReferenceRemovedEventHandler
(this.ReferenceRemoved); 
    }
  }

  // References related events.
  public void ReferenceRemoved( VSLangProj.Reference removedRef ) 
  { 
    outputWinPane.OutputString( "ReferencesEvents.ReferenceRemoved"
 + "\n" ); 
    outputWinPane.OutputString( "The reference to " + removedRef.Name
 + " was removed." + "\n" ); 
  } 

  public void ReferenceChanged( VSLangProj.Reference changedRef ) 
  { 
    outputWinPane.OutputString( "ReferencesEvents.ReferenceChanged" 
+ "\n" ); 
    outputWinPane.OutputString( "The reference to " + changedRef.Name 
+ " was changed." + "\n" ); 
  } 
        
  public void ReferenceAdded( VSLangProj.Reference addedRef ) 
  { 
    outputWinPane.OutputString( "ReferencesEvents.ReferenceAdded" +
 "\n" ); 
    outputWinPane.OutputString( "The reference to " + addedRef.Name 
+ " was added." + "\n" ); 
  } 
  public void OnAddInsUpdate(ref System.Array custom)
  {
  }
  public void OnStartupComplete(ref System.Array custom)
  {
  }
  public void OnBeginShutdown(ref System.Array custom)
  {
  }
  private DTE2 _applicationObject;
  private AddIn _addInInstance;
  private VSLangProj.ReferencesEvents refEvents;
  private OutputWindowPane outputWinPane;
  }}

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 v konkrétní projekt (Visual Basic)

Referenční dokumentace

+= Operátor (C#-Reference)

-= Operátor (C#-Reference)

Další zdroje

Reakce na události automatizace

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