Partilhar via


Como: Manipular eventos de automação (Visual Basic)

O procedimento a seguir demonstra como manipular eventos relacionados à janela usando um Visual Studio suplemento.

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 manipular eventos relacionados à janela usando o Visual Basic

  1. Criar um Visual Studio Projeto suplemento usando Visual Basic.

  2. Na classe conectar, inicializar uma variável para manipular o WindowEvents objeto e a outra variável para armazenar um OutputWindowPane objeto.

    Public WithEvents winEvents As EnvDTE.WindowEvents
    Private outputWinPane As OutputWindowPane
    

    Neste exemplo, a variável é denominada winEvents.Outros objetos no modelo de automação estão relacionadas a outros tipos de eventos.Por exemplo, FindEvents se aplica a eventos relacionados a operações, localizar e TaskListEvents se aplica a eventos relacionados a Lista de tarefas.Para obter uma lista completa de eventos disponível, consulte Respondendo a eventos de automação.

  3. No OnConnection método, inicializar uma variável para interceptar eventos. No exemplo a seguir, essa variável é denominada eventos.

    Dim events As EnvDTE.Events
    events = _applicationObject.Events
    
  4. Recupera os objetos de evento do modelo de automação.

    winEvents = CType(events.WindowEvents(Nothing), EnvDTE.WindowEvents)
    

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

  5. Adicione procedimentos para cada evento relacionado a objeto de evento.Por exemplo, para manipular o evento que ocorre quando uma janela é fechada, você usaria:

    Private Sub windowsEvents_WindowClosing(ByVal Window As _
    EnvDTE.Window) Handles winEvents.WindowClosing
        outputWinPane.OutputString("WindowEvents.WindowClosing" & _
        ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab & "Window: " & _
        Window.Caption & ControlChars.Lf)
    End Sub
    

    No caso do WindowEvents o objeto, você deve ter procedimentos para WindowActivated, WindowClosing, WindowCreated, e WindowMoved. O código completo está listado no exemplo a seguir.

  6. Finalmente, para pr evento Visual Studio de diminuindo a velocidade do sistema ao continuar monitorar s evento relacionados à janela depois de fechar o suplemento, desabilitar evento tratamento. In Visual Basic, isso é concluído definindo a evento manipulador Nothing.

    Public Sub OnDisconnection(ByVal disconnectMode As _
    ext_DisconnectMode, ByRef custom As Array) Implements _
    IDTExtensibility2.OnDisconnection
        winEvents = Nothing
    End Sub
    

    Isso desativa o tratamento de evento se o suplemento é desligar, ou o IDE é desligar 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 eventos relacionados à janela no Visual Studio. Sempre que ocorrerem eventos relacionados à janela, uma mensagem de notificação é enviada para o Saída janela.

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

Public Class Connect
    Implements IDTExtensibility2
    ' Handle window events.
    Public WithEvents winEvents As EnvDTE.WindowEvents
    Private outputWinPane As OutputWindowPane

    Dim _applicationObject As DTE2
    Dim _addInInstance As AddIn

    Public Sub OnConnection(ByVal application As Object, ByVal _
    connectMode As ext_ConnectMode, ByVal addInInst As Object, ByRef _
    custom As Array) Implements IDTExtensibility2.OnConnection
        _applicationObject = CType(application, DTE2)
        _addInInstance = CType(addInInst, AddIn)

        Dim events As EnvDTE.Events
        events = _applicationObject.Events
        ' 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("DTE Event _
        Information")

        ' Retrieve the event objects from the automation model.
        ' Visual Basic automatically connects the method handler 
        ' because the object variable declaration uses the 'WithEvents'
        ' handler.
        winEvents = CType(events.WindowEvents(Nothing), _
        EnvDTE.WindowEvents)
    End Sub

    ' Handle all window-related events.
    Private Sub windowsEvents_WindowActivated(ByVal GotFocus As _
    EnvDTE.Window, ByVal LostFocus As EnvDTE.Window) Handles _
    winEvents.WindowActivated
        outputWinPane.OutputString("WindowEvents.WindowActivated" & _
        ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab  _
        & "Window receiving focus: " & GotFocus.Caption  _
        & ControlChars.Lf)
        outputWinPane.OutputString _
        (ControlChars.Tab & "Window that lost focus: " _
        & LostFocus.Caption & ControlChars.Lf)
    End Sub

    Private Sub windowsEvents_WindowClosing(ByVal Window As _
    EnvDTE.Window) Handles winEvents.WindowClosing
        outputWinPane.OutputString("WindowEvents.WindowClosing" & _
        ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab & "Window: " & _
        Window.Caption & ControlChars.Lf)
    End Sub

    Private Sub windowsEvents_WindowCreated(ByVal Window As _
    EnvDTE.Window) Handles winEvents.WindowCreated
        outputWinPane.OutputString("WindowEvents.WindowCreated" & _
        ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab & "Window: " & _
        Window.Caption & ControlChars.Lf)
    End Sub

    Private Sub windowsEvents_WindowMoved(ByVal Window As _
    EnvDTE.Window, ByVal Top As Integer, ByVal Left As Integer, ByVal _
    [Width] As Integer, ByVal Height As Integer) Handles _
    winEvents.WindowMoved
        outputWinPane.OutputString("WindowEvents.WindowMoved" & _
        ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab & "Window: " & _
        Window.Caption & ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab & "Location: (" & _
        Top.ToString() & " , " & Left.ToString() & " , " & _
        Width.ToString() & " , " & Height.ToString() & ")" & _
        ControlChars.Lf)
    End Sub

    Public Sub OnDisconnection(ByVal disconnectMode As _
    ext_DisconnectMode, ByRef custom As Array) Implements _
    IDTExtensibility2.OnDisconnection
        ' Turns off window event handling when the add-in shuts down.
        winEvents = Nothing
    End Sub

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

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

    Public Sub OnBeginShutdown(ByRef custom As Array) Implements _
    IDTExtensibility2.OnBeginShutdown
    End Sub
End Class

Compilando o código

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

Consulte também

Tarefas

Como: Manipular eventos de automação (translation from VPE for Csharp Visual)

Outros recursos

Respondendo a eventos de automação