Gewusst wie: Reagieren auf Ereignisse in einem bestimmten Projekt (Visual Basic)
Das Automatisierungsmodell enthält Objekte, mit denen Sie auf Umgebungsereignisse in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio reagieren können. Die in VSLangProj und VSLangProj80 definierten Umgebungsereignisse sind für Visual C#- und Visual Basic-Projekte spezifisch. ImportsEvents wird z. B. ausgelöst, wenn einer Imports-Auflistung ein Importvorgang hinzugefügt bzw. daraus entfernt wird.
Dieses Beispiel fügt einem Add-In-Projekt mithilfe von Visual Basic einen projekttypspezifischen ReferencesEvents-Ereignishandler hinzu. ReferencesEvents wird ausgelöst, wenn ein Verweis geändert, hinzugefügt oder aus einem Visual C#- oder Visual Basic-Projekt entfernt wird.
Tipp
Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen. Bei der Entwicklung dieser Verfahren war die Option Allgemeine Entwicklungseinstellungen aktiviert. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Arbeiten mit Einstellungen.
So behandeln Sie verweisbezogene Ereignisse mit Visual Basic
Erstellen Sie in Visual Basic ein Visual Studio-Add-In-Projekt.
Fügen Sie am Anfang der Datei Connect.vb Imports VSLangProj ein.
Klicken Sie im Menü Projekt auf Verweis hinzufügen, klicken Sie auf die Registerkarte .NET, wählen Sie das erste VSLangProj aus, und klicken Sie dann auf OK.
Initialisieren Sie in der Connect-Klasse eine Variable zum Behandeln des ReferencesEvents-Objekts und eine weitere Variable zum Behandeln von 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
In diesem Beispiel hat die Variable den Namen refEvents.
Andere Objekte im Automatisierungsmodell beziehen sich auf andere projektspezifische Ereignistypen. ImportsEvents wird z. B. ausgelöst, wenn einer Imports-Auflistung ein Importvorgang hinzugefügt bzw. daraus entfernt wird. BuildManagerEvents gilt für Ereignisse in Verbindung mit temporären Assemblys, die aus Ausgaben benutzerdefinierter Tools erstellt wurden. Weitere Informationen über das BuildManager-Objekt finden Sie unter Einführung in das BuildManager-Objekt. Eine vollständige Liste der Ereignisse, die für Projekttypen gelten, finden Sie unter Ereignisobjekte (abgestimmt auf Projekttypen). Eine Liste allgemeiner Automatisierungsereignisse finden Sie unter Ereignisobjekte für die Automatisierung.
Initialisieren Sie in der OnConnection-Methode eine Variable, um Ereignisse abzufangen. In diesem Beispiel hat die Variable den Namen events.
Dim events As EnvDTE80.Events2 events = CType(_applicationObject.Events, Events2)
Initialisieren Sie in der OnConnection-Methode eine OutputWindow-Variable.
Dim outputWindow As OutputWindow outputWindow = CType(_applicationObject.Windows.Item _ (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow) outputWinPane = outputWindow.OutputWindowPanes.Add_ ("Reference Event Information ")
Rufen Sie in der OnConnection-Methode zudem die Ereignisobjekte vom Automatisierungsmodell ab.
refEvents = CType(events.GetObject("CSharpReferencesEvents"),_ ReferencesEvents)
Visual Studio stellt automatisch die Verbindung zum Methodenhandler her, da die Deklaration der Objektvariablen den WithEvents (Visual Basic)-Handler verwendet.
In diesem Beispiel gelten ReferencesEvents für Visual C#-Projekte. Ersetzen Sie die Zeichenfolge CSharpReferencesEvents durch VBReferencesEvents, um auf Ereignisse zu reagieren, die für Visual Basic-Ereignisse spezifisch sind. Weitere Informationen zum Festlegen der Zeichenfolgen, die für Ereignisse verwendet werden, die für unterschiedliche Projekttypen gelten, finden Sie unter Ereignisobjekte (abgestimmt auf Projekttypen).
Fügen Sie Prozeduren für jedes auf das Ereignisobjekt bezogene Ereignis hinzu. Um beispielsweise das Ereignis zu behandeln, das beim Hinzufügen eines Verweises auftritt, verwenden Sie folgenden Code:
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
Für ReferencesEvents müssen Sie Ereignisse für ReferenceAdded, ReferenceRemoved, ReferenceChanged definieren, wie in der vollständigen Liste im unten stehenden Beispiel zu sehen.
Um schließlich zu verhindern, dass Visual Studio nach Schließen des Add-Ins durch die fortdauernde Überwachung fensterbezogener Ereignisse die Systemleistung beeinträchtigt, sollten Sie die Ereignisbehandlung deaktivieren. Dazu legen Sie in Visual Basic den Ereignishandler auf Nothing fest.
Public Sub OnDisconnection(ByVal RemoveMode As_ Extensibility.ext_DisconnectMode, ByRef custom As System.Array)_ Implements Extensibility.IDTExtensibility2.OnDisconnection refEvents = Nothing End Sub
Dadurch wird die Ereignisbehandlung unabhängig davon deaktiviert, ob das Add-In oder die IDE heruntergefahren wird, während das Add-In ausgeführt wird. Wenn die IDE heruntergefahren wird, werden automatisch alle ausgeführten Add-Ins zuerst beendet.
Beispiel
Das folgende Beispiel mit einem einfachen Visual Studio-Add-In veranschaulicht das Abfangen und Behandeln von Visual C#-Verweisereignissen in Visual Studio. Sobald ein Verweisereignis auftritt, wird an das Ausgabefenster eine Benachrichtigung gesendet.
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
Kompilieren des Codes
Um diesen Code zu kompilieren, erstellen Sie in Visual Basic ein neues Visual Studio-Add-In-Projekt und ersetzen den Code der Connect-Klasse durch den Code im Beispiel. Informationen zum Ausführen eines Add-Ins finden Sie unter Gewusst wie: Steuern von Add-Ins mit dem Add-In-Manager.
Siehe auch
Aufgaben
Gewusst wie: Reagieren auf Ereignisse in einem bestimmten Projekt (Visual C#)
Referenz
Imports-Anweisung (.NET-Namespace und Typ)
Weitere Ressourcen
Reagieren auf Automatisierungsereignisse
Reagieren auf Ereignisse (Visual Basic- und Visual C#-Projekte)