Procedura: rispondere agli eventi in un progetto specifico (Visual Basic)
Nel modello di automazione sono inclusi oggetti che è possibile utilizzare per rispondere a eventi di ambiente nell'ambiente di sviluppo integrato (IDE, Integrated Development Environment) di Visual Studio. Gli eventi di ambiente definiti in VSLangProj e VSLangProj80 sono specifici dei progetti Visual C# e Visual Basic. Ad esempio, ImportsEvents viene generato quando un'importazione viene aggiunta o rimossa da un insieme Imports.
In questo esempio Visual Basic viene utilizzato per aggiungere un gestore eventi ReferencesEvents, specifico di un tipo di progetto, a un progetto di componente aggiuntivo. Gli eventi ReferencesEvents vengono generati quando un riferimento viene modificato, aggiunto o rimosso da un progetto Visual C# o Visual Basic.
Nota
È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma. Queste procedure sono state sviluppate con le Impostazioni generali per lo sviluppo attive. Per modificare le impostazioni, scegliere Importa/Esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Gestione delle impostazioni.
Per gestire gli eventi riferimento mediante Visual Basic
Creare un progetto di componente aggiuntivo Visual Studio in Visual Basic.
Aggiungere Imports VSLangProj all'inizio del file Connect.vb.
Scegliere Aggiungi riferimento dal menu Progetto, selezionare la scheda .NET, il primo VSLangProj, quindi scegliere OK.
Nella classe Connect inizializzare una variabile per gestire l'oggetto ReferencesEvents e un'altra per gestire un oggetto 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
Nell'esempio la variabile è denominata refEvents.
Altri oggetti del modello di automazione sono correlati ad altri tipi di eventi specifici del progetto. Ad esempio, ImportsEvents viene generato quando un'importazione viene aggiunta o rimossa da un insieme Imports. BuildManagerEvents si applica a eventi correlati ad assembly temporanei compilati da output di strumenti personalizzati. Per ulteriori informazioni sull'oggetto BuildManager, vedere Introduzione all'oggetto BuildManager. Per un elenco completo degli eventi specifici di tipi di progetti, vedere Oggetti di eventi (specifici dei tipi di progetto). Per un elenco degli eventi di automazione generali, vedere Oggetti degli eventi di automazione.
Nel metodo OnConnection inizializzare una variabile per intercettare gli eventi. Nell'esempio la variabile è denominata events.
Dim events As EnvDTE80.Events2 events = CType(_applicationObject.Events, Events2)
Nel metodo OnConnection inizializzare una variabile OutputWindow.
Dim outputWindow As OutputWindow outputWindow = CType(_applicationObject.Windows.Item _ (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow) outputWinPane = outputWindow.OutputWindowPanes.Add_ ("Reference Event Information ")
Nel metodo OnConnection recuperare gli oggetti evento dal modello di automazione.
refEvents = CType(events.GetObject("CSharpReferencesEvents"),_ ReferencesEvents)
Visual Studio si connette automaticamente al gestore metodi perché la dichiarazione della variabile oggetto utilizza il gestore WithEvents (Visual Basic).
Nell'esempio gli oggetti ReferencesEvents sono specifici dei progetti Visual C#. Per rispondere a eventi specifici degli eventi Visual Basic, sostituire la stringa CSharpReferencesEvents con VBReferencesEvents. Per ulteriori informazioni su come determinare le stringhe da utilizzare per eventi specifici di tipi diversi di progetti, vedere Oggetti di eventi (specifici dei tipi di progetto).
Aggiungere routine per ogni evento correlato all'oggetto evento. Per gestire l'evento che viene generato all'aggiunta di un riferimento, ad esempio, si utilizzerebbe:
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
Nel caso di ReferencesEvents, è necessario disporre di eventi definiti per ReferenceAdded, ReferenceRemoved, ReferenceChanged, come illustrato nell'elenco completo dell'esempio riportato di seguito.
Infine, per evitare che il sistema venga rallentato a causa del monitoraggio continuo degli eventi relativi a finestre da parte di Visual Studio, dopo la chiusura del componente aggiuntivo è necessario disabilitare la gestione degli eventi. Per eseguire questa operazione in Visual Basic, impostare il gestore eventi su Nothing.
Public Sub OnDisconnection(ByVal RemoveMode As_ Extensibility.ext_DisconnectMode, ByRef custom As System.Array)_ Implements Extensibility.IDTExtensibility2.OnDisconnection refEvents = Nothing End Sub
La gestione degli eventi viene disabilitata sia che il componente aggiuntivo o l'IDE venga arrestato quando il componente aggiuntivo è ancora in esecuzione. Prima che l'IDE venga arrestato, vengono arrestati automaticamente tutti i componenti aggiuntivi in esecuzione.
Esempio
Nell'esempio riportato di seguito è illustrato un componente aggiuntivo di Visual Studio di base per l'intercettazione e la gestione degli eventi riferimento di Visual C# in Visual Studio. Ogni volta che viene generato un evento riferimento, un messaggio di notifica viene inviato alla finestra di output.
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
Compilazione del codice
Per compilare il codice, creare un nuovo progetto aggiuntivo Visual Studio e in Visual Basic sostituire il codice della classe Connect con il codice riportato nell'esempio. Per ulteriori informazioni sull'esecuzione di un componente aggiuntivo, vedere Procedura: controllare i componenti aggiuntivi tramite Gestione componenti aggiuntivi.
Vedere anche
Attività
Procedura: rispondere agli eventi in un progetto specifico (Visual #)
Riferimenti
Istruzione Imports (tipo e spazio dei nomi .NET)