Sdílet prostřednictvím


Postupy: Reagování na události v konkrétním projektu (Visual Basic)

Model automatizace obsahuje objekty, které lze použít k reakci na události prostředí v integrovaném vývojovém prostředí IDE Visual Studio.Události prostředí definované v VSLangProj a VSLangProj80 jsou specifické pro projekty Visual C# a Visual Basic.Například ImportsEvents se vyvolá, když je přidán či odebrán import z kolekce Imports.

V tomto příkladu se používá Visual Basic pro přidání popisovače událostí ReferencesEvents, která je specifická pro typ projektu, do projektu doplňku.ReferencesEvents jsou vyvolány při změně, přidání nebo odebrání odkazu z projektu Visual C# nebo Visual Basic.

[!POZNÁMKA]

Váš počítač může zobrazit jiné názvy nebo umístění pro některé prvky uživatelského rozhraní sady Visual Studio v následujících pokynech.Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením.Další informace naleznete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.

Zpracování událostí souvisejících s odkazy v jazyce Visual Basic

  1. Vytvořte projekt doplňku Visual Studio v Visual Basic.

  2. Přidejte Imports VSLangProj na začátek souboru Connect.vb.

  3. V nabídce Projekt klepněte na tlačítko Přidat odkaz, klepněte na kartu .NET, vyberte první VSLangProj a klepněte na tlačítko OK.

  4. Ve třídě Připojit inicializujte proměnnou ke zpracování, objekt ReferencesEvents a další zpracování 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
    

    V tomto příkladu je proměnná pojmenována jako refEvents.

    Ostatní objekty v modelu automatizace se vztahují na jiné typy událostí, které jsou specifické pro projekt.Například ImportsEvents se vyvolá, když je přidán či odebrán import z kolekce Imports.BuildManagerEvents platí pro události týkající se dočasného sestavení z výstupů vlastních nástrojů.Další informace o objektu BuildManager najdete v tématu Představení objektu BuildManager.Úplný seznam událostí, které jsou specifické pro typy projektů, naleznete v tématu Objekty událostí (specifické pro typy projektů).Seznam obecné automatizace událostí naleznete v tématu Automatizace objektů události.

  5. V metodě OnConnection inicializujte proměnnou pro zachycení událostí.V tomto příkladu je proměnná pojmenována jako událost.

        Dim events As EnvDTE80.Events2
        events = CType(_applicationObject.Events, Events2)
    
  6. V metodě OnConnection inicializujte proměnnou OutputWindow.

        Dim outputWindow As OutputWindow
        outputWindow = CType(_applicationObject.Windows.Item _
        (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow)
        outputWinPane = outputWindow.OutputWindowPanes.Add_
        ("Reference Event Information ")
    
  7. Také v metodě OnConnection načtěte objekty událostí z modelu automatizace.

    refEvents = CType(events.GetObject("CSharpReferencesEvents"),_
     ReferencesEvents)
    

    Visual Studio automaticky připojí obslužnou rutinu metody, protože deklarace proměnné objektu používá obslužnou rutinu WithEvents (Visual Basic).

    V tomto příkladu jsou ReferencesEvents specifické pro projekty Visual C#.Chcete-li reagovat na události, které jsou specifické pro události Visual Basic, nahraďte řetězec CSharpReferencesEvents hodnotou VBReferencesEvents.Další informace o určení řetězců pro události, které jsou specifické pro různé typy projektů naleznete v tématu Objekty událostí (specifické pro typy projektů).

  8. Přidejte procedury pro každou událost týkající objektu události.Například pro zpracování událostí, které nastanou, když je přidán odkaz, byste použili:

    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
    

    V případě ReferencesEvents musíte mít definované události pro ReferenceAdded, ReferenceRemoved, ReferenceChanged, jak je uvedeno v úplném seznam níže uvedeného příkladu.

  9. Nakonec, aby se zabránilo zpomalení systému aplikací Visual Studio tak, že nadále budou sledovány události týkající se oken po zavření doplňku, měli byste zakázat zpracování událostí.V Visual Basic se to provádí nastavením obslužné rutiny události Nothing.

    Public Sub OnDisconnection(ByVal RemoveMode As_
     Extensibility.ext_DisconnectMode, ByRef custom As System.Array)_
     Implements Extensibility.IDTExtensibility2.OnDisconnection
        refEvents = Nothing
    End Sub
    

    Tím dojde k vypnutí zpracování událostí, ať je doplněk nebo IDE vypnutý, nebo je doplněk stále spuštěný.Při vypnutí rozhraní IDE se všechny spuštěné doplňky automaticky ukončí jako první.

Příklad

Následující příklad je základní doplněk Visual Studio, který ukazuje, jak vyhledat a zpracovat události odkazu Visual C# v Visual Studio.Kdykoli dojde k události na odkaz, je do okna Výstup zasláno oznámení.

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

Probíhá kompilace kódu

Chcete-li tento kód zkompilovat, vytvořte nový projekt doplňku Visual Studio v Visual Basic a nahraďte kód ve třídě Připojit kódem v příkladu.Další informace o spuštění doplňku naleznete v části Postupy: Řízení doplňků pomocí Správce doplňků.

Viz také

Úkoly

Postupy: Reagování na události v konkrétním projektu (Visual C#)

Referenční dokumentace

Imports – příkaz (obor názvů a typ rozhraní .NET)

Další zdroje

Reagování na události automatizace

Reagování na události (projekty Visual Basic a Visual C#)