Partilhar via


Como: Responder a eventos em um projeto específico (translation from VPE for Csharp Visual)

O modelo de automação contém objetos que podem ser usados para responder a eventos de ambiente no Visual Studio ambiente de desenvolvimento integrado (IDE). Os eventos de ambiente definidos no VSLangProj e VSLangProj80 são específicas para Visual C#, Visual Basic, e Visual J# projetos. Por exemplo, ImportsEvents é disparado quando uma importação é adicionada ou removida de um Visual Basic projeto.

Este exemplo usa Visual C# Para adicionar um ReferencesEvents manipulador de eventos, que é específico para um tipo de projeto para um projeto suplemento. ReferencesEvents são gerados quando uma referência é alterada, adicionada ou removida de um Visual C#, Visual Basic, ou Visual J# projeto.

Observação:

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Esses procedimentos foram desenvolvidos com o Geral Development Settings ativo.Para alterar as configurações, escolher Importar e exportar configurações on the Ferramentas menu.Para obter mais informações, consulte Configurações do Visual Studio.

Para lidar com referência de eventos relacionados usando translation from VPE for Csharp Visual

  1. Criar um Visual Studio projeto suplemento em Visual C#.

  2. Add using VSLangProj; para a parte superior do arquivo conectar.cs.

  3. Sobre o Projeto menu, clicar Adicionar referência, clicar no NET guia, selecionar a primeira VSLangProj e clicar OK.

  4. Na classe conectar, inicializar uma variável para manipular o ReferencesEvents objeto e outro para lidar com um OutputWindowPane.

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

    No exemplo, a variável é denominada refEvents.

    Outros objetos no modelo de automação estão relacionadas a outros tipos de eventos que são específicos para o projeto.Por exemplo, ImportsEvents é disparado quando uma importação é adicionada ou removida de um Imports coleção. BuildManagerEvents aplica a eventos relacionados a assemblies temporários criados a partir de saídas de ferramentas personalizadas. Para obter mais informações sobre o BuildManager objeto, consulte Introdução ao objeto BuildManager. Para obter uma lista completa dos eventos que são específicas para tipos de projetos, consulte Objetos de evento (específicas para tipos de projetos)e uma lista dos eventos de automação Geral, consulte Objetos de eventos de automação.

  5. No OnConnection método, inicializar uma variável para interceptar eventos. Neste exemplo, a variável é chamada events.

    EnvDTE80.Events2 events = 
    (EnvDTE80.Events2)_applicationObject.Events;
    
  6. No OnConnection método, inicializar um OutputWindow variável.

    OutputWindow outputWindow = (OutputWindow)_applicationObject.Windows.Item
    (Constants.vsWindowKindOutput).Object;
    outputWinPane = outputWindow.OutputWindowPanes.Add
    ("ReferencesEvents Event Information");
    
  7. Também no OnConnection método, recuperar os objetos de evento do modelo de automação.

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

    Neste exemplo o ReferencesEvents são específicas para Visual C# projetos. Para responder a Visual Basic, ou Visual J# eventos específicos, substitua a seqüência, CSharpReferencesEvents, com VBReferencesEvents ou VJSharpReferencesEvents, respectivamente. Para obter mais informações sobre como determinar as cadeias de caracteres a ser usado para eventos que são específicos para diferentes tipos de projetos, consulte Objetos de evento (específicas para tipos de projetos).

  8. Conectar-se a cada delegado exposto em objetos de evento do recuperadas na etapa 3 usando o operador +=.Por exemplo, para conectar os delegados expostos pelo ReferenceAdded evento, você usaria:

    refEvents.ReferenceAdded += new 
    _dispReferencesEvents_ReferenceAddedEventHandler
    (this.ReferenceAdded);
    
  9. Adicione procedimentos para cada evento que está relacionado ao objeto de evento.Por exemplo, para manipular o evento que ocorre quando uma referência é adicionada, você usaria:

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

    No caso de ReferencesEvents, você deve ter eventos definidos para:

    e

    A lista completa de exemplo a seguir inclui esses eventos.

  10. Finalmente, para pr evento Visual Studio de diminuindo o seu sistema continua a monitorar s evento relacionados à janela depois de fechar o suplemento, você deve desabilitar evento tratamento. In Visual C# Isso é concluído usando o operador-=. Por exemplo, para desabilitar a manipulação de eventos para o ReferenceAdded Você usaria:

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

    Isso desativa o tratamento de eventos se o suplemento ou o IDE é encerrado enquanto o suplemento ainda está sendo executado.Quando o IDE for desligado, todos os suplementos em execução são automaticamente fechar primeiro.

Exemplo

O exemplo a seguir é um básico Visual Studio suplemento que demonstra como interceptar e manipular Visual C# referência de eventos Visual Studio. Sempre que ocorre um evento de referência, uma mensagem de notificação é enviada para o Saída janela.

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;
  }}

Compilando o código

Para compilar este código, crie um novo Visual Studio projeto suplemento em Visual C# e substitua o código de classe conectar com o código de exemplo. Para obter informações sobre como executar um suplemento, consulte Como: Controlarar Adicionar-ins com o Adicionar - in Gerente.

Consulte também

Tarefas

Como: Responder a eventos em um projeto específico (Visual Basic)

Referência

+= Operador (Referência C#)

-= Operador (Referência C#)

Outros recursos

Respondendo a eventos de automação

Respondendo a eventos (Visual Basic e Visual translation from VPE for Csharp projetos)