Cómo: Responder a eventos en un proyecto específico (Visual Basic)
El modelo de automatización incluye objetos que se pueden utilizar para responder a eventos de entorno del entorno de desarrollo integrado (IDE) de Visual Studio. Los eventos de entorno definidos en VSLangProj y VSLangProj80 son específicos de los proyectos de Visual C# y Visual Basic. Por ejemplo, se provoca ImportsEvents cuando se agrega o se quita una importación de una colección Imports.
En este ejemplo se utiliza Visual Basic para agregar un controlador de eventos ReferencesEvents, que es específico de un tipo de proyecto, a un proyecto de complemento. Los eventos ReferencesEvents se generan cuando se cambia, agrega o quita una referencia de un proyecto de Visual C# o Visual Basic.
Nota |
---|
Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones.La edición de Visual Studio que tenga y la configuración que esté usando determinan estos elementos.Para obtener más información, vea Personalizar la configuración de desarrollo en Visual Studio. |
Para controlar eventos relacionados con referencias mediante Visual Basic
Cree un proyecto de complemento de Visual Studio en Visual Basic.
Agregue Imports VSLangProj al principio del archivo Connect.vb.
En el menú Proyecto, haga clic en Agregar referencia, luego en la ficha .NET, seleccione el primer VSLangProj y haga clic en Aceptar.
En la clase Connect, inicialice una variable para controlar el objeto ReferencesEvents y otra para controlar un objeto 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
En este ejemplo, la variable se denomina refEvents.
Otros objetos del modelo de automatización están relacionados con otros tipos de eventos específicos del proyecto. Por ejemplo, se provoca ImportsEvents cuando se agrega o se quita una importación de una colección Imports. BuildManagerEvents se aplica a eventos relacionados con ensamblados temporales compilados a partir de resultados de herramientas personalizadas. Para obtener más información sobre el objeto BuildManager, vea Introducción al objeto BuildManager. Para ver una lista completa de los eventos específicos de los tipos de proyecto, vea Objetos de evento (específicos para tipos de proyectos). Para obtener una lista de eventos de automatización generales, vea Objetos de eventos de automatización.
En el método OnConnection, inicialice una variable para interceptar eventos. En este ejemplo, la variable se denomina events.
Dim events As EnvDTE80.Events2 events = CType(_applicationObject.Events, Events2)
En el método OnConnection, inicialice una variable OutputWindow.
Dim outputWindow As OutputWindow outputWindow = CType(_applicationObject.Windows.Item _ (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow) outputWinPane = outputWindow.OutputWindowPanes.Add_ ("Reference Event Information ")
Además, en el método OnConnection, recupere los objetos del evento del modelo de automatización.
refEvents = CType(events.GetObject("CSharpReferencesEvents"),_ ReferencesEvents)
Visual Studio conecta automáticamente el controlador de métodos, porque la declaración de la variable de objeto utiliza el controlador WithEvents (Visual Basic).
En este ejemplo, los eventos ReferencesEvents son específicos de proyectos de Visual C#. Para responder a eventos que son específicos de los eventos de Visual Basic, reemplace la cadena CSharpReferencesEvents por VBReferencesEvents. Para obtener más información sobre cómo determinar las cadenas que se deben utilizar en eventos específicos de diferentes tipos de proyectos, vea Objetos de evento (específicos para tipos de proyectos).
Agregue procedimientos para cada evento relacionado con el objeto de evento. Por ejemplo, para controlar el evento que se produce al agregarse una referencia, se debería utilizar:
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
En el caso de ReferencesEvents, se deben haber definido los eventos de ReferenceAdded, ReferenceRemoved, ReferenceChanged, como se muestra en la lista completa del ejemplo que aparece más adelante.
Finalmente, para evitar que Visual Studio haga más lento el funcionamiento del sistema al seguir supervisando los eventos relacionados con ventanas después de cerrar el complemento, debe deshabilitar el control de eventos. En Visual Basic, esto se hace estableciendo el controlador de eventos en Nothing.
Public Sub OnDisconnection(ByVal RemoveMode As_ Extensibility.ext_DisconnectMode, ByRef custom As System.Array)_ Implements Extensibility.IDTExtensibility2.OnDisconnection refEvents = Nothing End Sub
De esta forma, se desactiva el control de eventos, ya sea que se cierre el complemento o el IDE mientras el complemento aún se está ejecutando. Cuando se cierra el IDE, en primer lugar, todos los complementos en ejecución se cierran automáticamente.
Ejemplo
En el siguiente ejemplo de un complemento básico de Visual Studio se muestra cómo interceptar y controlar los eventos de referencia de Visual C# en Visual Studio. Siempre que se produce un evento de referencia, se envía un mensaje de notificación a la ventana de salida.
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
Compilar el código
Para compilar este código, cree un nuevo proyecto de complemento de Visual Studio en Visual Basic y reemplace el código de la clase Connect por el código del ejemplo. Para obtener información sobre cómo ejecutar un complemento, vea Cómo: Controlar complementos con el Administrador de complementos.
Vea también
Tareas
Cómo: Responder a eventos en un proyecto específico (Visual C#)
Referencia
Instrucción Imports (Tipo y espacio de nombres de .NET)