How to: Manipular eventos de automação (Visual Basic)
O procedimento a seguir demonstra como manipular eventos relacionados à janela usando um Visual Studio add-in.
Observação |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição. Esses procedimentos foram desenvolvidos com o General Development Settings ativo. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. Para obter mais informações, consulte Trabalhando com configurações. |
Para manipular os eventos relacionados à janela usando o Visual Basic
Criar um Visual Studio projeto usando o Add-in Visual Basic.
Na classe Connect, inicializar uma variável para lidar com 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 referem-se a outros tipos de eventos. Por exemplo, FindEvents se aplica a eventos relacionados a operações, localizar e TaskListEvents se aplica a eventos relacionados ao Lista de tarefas. Para obter uma lista completa de eventos disponíveis, consulte Respondendo a eventos de automação.
No OnConnection método, inicializar uma variável para interceptar eventos. No exemplo abaixo, essa variável é chamada de eventos.
Dim events As EnvDTE.Events events = _applicationObject.Events
Recupere os objetos de eventos do modelo de automação.
winEvents = CType(events.WindowEvents(Nothing), EnvDTE.WindowEvents)
Visual Studioconecta-se automaticamente o manipulador do método porque a declaração de variável de objeto usa a WithEvents (Visual Basic) o manipulador.
Adicione os procedimentos para cada evento relacionados ao objeto de evento. Por exemplo, para manipular o evento que ocorre quando uma janela é fechada, use:
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.
Finalmente, para evitar Visual Studio da redução do seu sistema, continuando a monitorar eventos de janela depois de fechar o add-in, desativar tratamento de evento. Em Visual Basic, isso é feito definindo-se o manipulador de eventos para 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 eventos se o suplemento está desligado ou o IDE for desligado enquanto o add-in ainda está em execução. Quando o IDE for desligado, o todos os suplementos em execução são desligados automaticamente primeiro.
Exemplo
O exemplo a seguir é um basic Visual Studio add-in que demonstra como interceptar e manipular eventos relacionados à janela, em 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 esse código, crie um novo Visual Studio projeto de suplemento no Visual Basic e substitua o código da classe de conectar-se com o código de exemplo. Para obter informações sobre como executar o suplemento, consulte Como: controle de Adicionar-</c0>.
Consulte também
Tarefas
How to: Manipular eventos de automação (Visual C#)