Condividi tramite


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

  1. Creare un progetto di componente aggiuntivo Visual Studio in Visual Basic.

  2. Aggiungere Imports VSLangProj all'inizio del file Connect.vb.

  3. Scegliere Aggiungi riferimento dal menu Progetto, selezionare la scheda .NET, il primo VSLangProj, quindi scegliere OK.

  4. 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.

  5. 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)
    
  6. 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 ")
    
  7. 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).

  8. 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.

  9. 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)

Altre risorse

Risposta a eventi di automazione

Risposta agli eventi (progetti Visual Basic e Visual C#)