Partilhar via


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

O modelo de automação inclui objetos que podem ser usados para responder a eventos de ambiente no ambiente de desenvolvimento integrado (IDE)Visual Studio. Os eventos de ambiente definidos em VSLangProj e em VSLangProj80 são específicos dos projetos Visual C# e Visual Basic. Por exemplo, ImportsEvents é gerado quando uma importação é adicionada ou removida de uma coleção Imports.

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

Dica

Seu computador pode mostrar diferentes nomes ou localizações para alguns dos elementos de interface do usuário Visual Studio nas instruções a seguir.A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.

Para manipular eventos relacionados a referências usando Visual Basic

  1. Criar um Visual Studio projeto de suplemento no Visual Basic.

  2. Adicione Imports VSLangProj ao topo do arquivo Connect.vb.

  3. No menu Projeto, clique em Adicionar Referência, clique na guia .NET, selecione o primeiro VSLangProj e clique em OK.

  4. Na classe Conectar, inicialize uma variável para manipular o objeto ReferencesEvents e outro para manipular OutputWindowPane.

    Public Class Connect
        Implements IDTExtensibility2
        Dim _applicationObject As DTE2
        Dim _addInInstance As AddIn
        ' Handle Reference events.
        Public WithEvents refEvents As VSLangProj.ReferencesEvents
        Private outputWinPane As OutputWindowPane
    

    Nesse exemplo, a variável é chamada refEvents.

    Outros objetos no modelo de automação relacionam com a outros tipos de eventos que são específicos do projeto. Por exemplo, ImportsEvents é gerado quando uma importação é adicionada ou removida de uma coleção Imports. BuildManagerEvents se aplica a eventos relacionados aos assemblies compilados temporários de saída de ferramentas personalizadas. Para obter mais informações sobre o objeto BuildManager, consulte Introdução ao objeto BuildManager Para obter uma lista completa dos eventos específicos de tipos de projetos, consulte Objetos de evento (específicos a tipos de projetos). Para obter uma lista de eventos gerais de automação, consulte Objetos de eventos de automação.

  5. No método OnConnection, inicialize uma variável para capturar eventos. Neste exemplo, a variável se chama events.

        Dim events As EnvDTE80.Events2
        events = CType(_applicationObject.Events, Events2)
    
  6. No método OnConnection, inicialize uma variável OutputWindow.

        Dim outputWindow As OutputWindow
        outputWindow = CType(_applicationObject.Windows.Item _
        (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow)
        outputWinPane = outputWindow.OutputWindowPanes.Add_
        ("Reference Event Information ")
    
  7. Também no método de OnConnection, recupera os objetos de evento do modelo de automação.

    refEvents = CType(events.GetObject("CSharpReferencesEvents"),_
     ReferencesEvents)
    

    Visual Studio conecta automaticamente o manipulador do método porque a declaração de variável de objeto usa o manipulador WithEvents (Visual Basic).

    Neste exemplo, ReferencesEvents são específicos para projetos do Visual C#. Para responder aos eventos específicos aos eventos Visual Basic, substitua a cadeia de caracteres, CSharpReferencesEvents com VBReferencesEvents. Para obter mais informações sobre como determinar as cadeias de caracteres a serem usadas para eventos específicos de diferentes tipos de projetos, consulte Objetos de evento (específicos a tipos de projetos).

  8. Adicione procedimentos para cada evento relativo ao objeto de evento. Por exemplo, para manipular o evento que ocorre quando uma referência é adicionada, você usaria:

    Sub ReferenceAdded(ByVal addedRef As VSLangProj.Reference)_
        Handles refEvents.ReferenceAdded
        outputWinPane.OutputString_
        ("ReferencesEvents.ReferenceAdded" & ControlChars.Lf)
        outputWinPane.OutputString("The reference to " _
        & addedRef.Name & " was added." & ControlChars.Lf)
    End Sub
    

    No caso de ReferencesEvents, você deve ter eventos definidos para ReferenceAdded, ReferenceRemoved, ReferenceChanged, conforme mostrado na listagem completa do exemplo abaixo.

  9. Por fim, para impedir que o Visual Studio reduza a velocidade do seu sistema ao continuar a monitorar eventos relacionados a janela depois de fechar o suplemento, você deverá desabilitar a manipulação de eventos. No Visual Basic, isso é feito definindo o manipulador de eventos como Nothing.

    Public Sub OnDisconnection(ByVal RemoveMode As_
     Extensibility.ext_DisconnectMode, ByRef custom As System.Array)_
     Implements Extensibility.IDTExtensibility2.OnDisconnection
        refEvents = Nothing
    End Sub
    

    Isso desativa a manipulação de eventos se o suplemento ou IDE forem fechados quando o suplemento estiver em execução. Quando o IDE é fechado, quaisquer suplementos em execução são fechados automaticamente primeiro.

Exemplo

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

Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj

Public Class Connect
    Implements IDTExtensibility2
    Dim _applicationObject As DTE2
    Dim _addInInstance As AddIn
    ' Handle Reference events.
    Public WithEvents refEvents As VSLangProj.ReferencesEvents
    Private outputWinPane As OutputWindowPane
Public Sub OnBeginShutdown(ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnBeginShutdown
End Sub

Public Sub OnAddInsUpdate(ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
End Sub

Public Sub OnStartupComplete(ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnStartupComplete
End Sub

Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnDisconnection
    ' Turns off reference event handling when the add-in shuts down.
    refEvents = Nothing
End Sub

Public Sub OnConnection(ByVal application As Object, _
 ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef _
 custom As System.Array) Implements _
 Extensibility.IDTExtensibility2.OnConnection

    _applicationObject = CType(application, EnvDTE80.DTE2)
    _addInInstance = CType(addInInst, EnvDTE.AddIn)

    Dim events As EnvDTE80.Events2
    events = CType(_applicationObject.Events, Events2)
    ' Send event messages to the Output window.
    Dim outputWindow As OutputWindow
    outputWindow = CType(_applicationObject.Windows.Item _
    (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow)
    outputWinPane = outputWindow.OutputWindowPanes.Add _
    ("Reference Event Information ")

    ' Retrieve the event objects from the automation model.
    ' Visual Basic automatically connects the method handler since 
    ' the object variable declaration uses the 'WithEvents' handler.
    refEvents = CType(events.GetObject("CSharpReferencesEvents"), _
    ReferencesEvents)
End Sub
    ' Handle all of the various reference-related events.
    Sub ReferenceRemoved(ByVal removedRef As VSLangProj.Reference) _
    Handles refEvents.ReferenceRemoved
    outputWinPane.OutputString("ReferencesEvents.ReferenceRemoved" _
    & ControlChars.Lf)
    outputWinPane.OutputString("The reference to " & removedRef.Name _
    & " was removed." & ControlChars.Lf)
End Sub

Sub ReferenceChanged(ByVal changedRef As VSLangProj.Reference) _
    Handles refEvents.ReferenceChanged
    outputWinPane.OutputString("ReferencesEvents.ReferenceChanged" _
    & ControlChars.Lf)
    outputWinPane.OutputString("The reference to " & changedRef.Name _
    & " was changed." & ControlChars.Lf)
End Sub
Sub ReferenceAdded(ByVal addedRef As VSLangProj.Reference) _
    Handles refEvents.ReferenceAdded
    outputWinPane.OutputString("ReferencesEvents.ReferenceAdded" _
    & ControlChars.Lf)
    outputWinPane.OutputString("The reference to " & addedRef.Name _
    & " was added." & ControlChars.Lf)
End Sub

End Class

Compilando o código

Para compilar este código, crie um novo projeto do suplemento Visual Studio em Visual Basic e substitua o código da classe Conectar com o código no exemplo. Para obter informações sobre como executar um suplemento, consulte Como controlar suplementos usando o Gerenciador de Suplementos.

Consulte também

Tarefas

Como responder a eventos em um projeto específico (Visual C#)

Referência

Instrução Imports (tipo e namespace .NET)

Outros recursos

Respondendo a eventos de automação

Respondendo a eventos (projetos do Visual Basic e do Visual C#)