Udostępnij za pośrednictwem


Porady: odpowiadanie na zdarzenia w specyficznym projekcie (Visual Basic)

Model automatyzacji zawiera obiekty, które mogą służyć do reagowania na zdarzenia środowiska w zintegrowanym środowisku programistycznym (IDE) Visual Studio.Zdarzenia środowiska, określone w VSLangProj i VSLangProj80 są specyficzne dla projektów Visual C# i Visual Basic.Na przykład, obiekt ImportsEvents jest zgłaszany, gdy import jest dodawany lub usuwany z kolekcji Imports.

Ten przykład używa Visual Basic, aby dodać program obsługi zdarzeń ReferencesEvents, który jest specyficzny dla typu projektu, do projektu dodatek.ReferencesEvents są wywoływane, gdy zmianie odwołanie jest zmieniane, dodawane do lub usuwane z projektu Visual C# lub Visual Basic.

[!UWAGA]

Komputer może polazać inne nazwy lub lokalizacje dla niektórych elementów interfejsu użytkownika Visual Studio w dalszych instrukcjach.Te elementy są determinowane przez numer edycji Twojego programu Visual Studio oraz Twoje ustawienia.Aby uzyskać więcej informacji, zobacz Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.

Do obsługi zdarzeń związanych z odwołaniami przy Visual Basic

  1. Utwórz projekt dodatku Visual Studio w Visual Basic.

  2. Dodaj Imports VSLangProj na początku pliku Connect.vb.

  3. W menu Projekt kliknij polecenie Dodaj odwołanie, kliknij kartę .NET, zaznacz pierwszą pozycję VSLangProj, a następnie kliknij przycisk OK.

  4. W klasie Połącz zainicjuj zmienną do obsługi obiektu ReferencesEvents i inny do obsługi obiektu 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
    

    W tym przykładzie zmienna ma nazwę refEvents.

    Inne obiekty w modelu automatyzacji odnoszą się do innych rodzajów zdarzeń, które są specyficzne dla projektu.Na przykład, obiekt ImportsEvents jest zgłaszany, gdy import jest dodawany lub usuwany z kolekcji Imports.BuildManagerEvents stosuje się do zdarzeń związanych z zestawami tymczasowymi zbudowanymi na podstawie danych wyjściowych narzędzi niestandardowych.Aby uzyskać więcej informacji na temat obiektu BuildManager, zobacz Wprowadzenie do obiektu BuildManager.Aby uzyskać pełną listę zdarzeń, które są specyficzne dla typów projektów, zobacz Obiekty zdarzeń (specyficzne dla typów projektów).Aby uzyskać listę ogólnych zdarzeń automatyzacji, zobacz Obiekty zdarzeń automatyzacji.

  5. W metodzie OnConnection zainicjuj zmienną do przechwytywania zdarzeń.W tym przykładzie zmienna ma nazwę events.

        Dim events As EnvDTE80.Events2
        events = CType(_applicationObject.Events, Events2)
    
  6. W metodzie OnConnection zainicjuj zmienną OutputWindow.

        Dim outputWindow As OutputWindow
        outputWindow = CType(_applicationObject.Windows.Item _
        (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow)
        outputWinPane = outputWindow.OutputWindowPanes.Add_
        ("Reference Event Information ")
    
  7. Również w metodzie OnConnection pobierz obiekty zdarzenia z modelu automatyzacji.

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

    Visual Studio automatycznie łączy obsługę metody, ponieważ deklaracja zmiennej obiektu używa obsługi WithEvents (Visual Basic).

    W tym przykładzie właściwości ReferencesEvents są specyficzne dla projektów w języku Visual C#.Aby reagować na zdarzenia, które są specyficzne dla zdarzeń Visual Basic, zastąp ciąg CSharpReferencesEventsVBReferencesEvents.Aby uzyskać więcej informacji dotyczących sposobu ustalania ciągów do użycia dla zdarzeń, które są specyficzne dla różnych typów projektów, zobacz Obiekty zdarzeń (specyficzne dla typów projektów).

  8. Dodawanie procedury dla każdego zdarzenia związanego z obiektem zdarzenia.Na przykład do obsługi zdarzenia, które wystąpiło podczas dodawania odwołania, możesz użyć:

    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
    

    W przypadku właściwości ReferencesEvents musisz mieć zdefiniowane zdarzenia dla obiektów ReferenceAdded, ReferenceRemoved i ReferenceChanged, jak pokazano w kompletnym wykazie w poniższym przykładzie.

  9. Na koniec aby zapobiec spowalnianiu przez program Visual Studio systemu poprzez kontynuowanie monitorowania zdarzeń związanych z oknami po zamknięciu dodatku, należy wyłączyć obsługę zdarzeń.W języku Visual Basic odbywa się przez ustawienie programu obsługi zdarzeń na Nothing.

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

    Powoduje to wyłączenie obsługi zdarzeń niezależnie od tego, czy dodatek lub IDE jest zamknięty w czasie gdy nadal uruchomiony jest dodatek.Po wyłączeniu IDE wszystkie uruchomione dodatki są automatycznie zamykane jak pierwsze.

Przykład

Poniższy przykład to podstawowy dodatek Visual Studio, który demonstruje, jak przechwytywać i obsługiwać odwołania Visual C# zdarzeń w Visual Studio.W każdym przypadku, gdy wystąpi zdarzenie odniesienia, komunikat z powiadomieniem jest wysyłany do okna Dane wyjściowe.

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

Kompilowanie kodu

Aby skompilować ten kod, utwórz nowy projekt dodatku Visual Studio w Visual Basic i zastąp kod klasy Połącz kodem w przykładzie.Aby uzyskać informacje na temat uruchamiania dodatku, zobacz Porady: kontrolowanie dodatków za pomocą menedżera dodatków.

Zobacz też

Zadania

Porady: odpowiadanie na zdarzenia w specyficznym projekcie (Visual C#)

Informacje

Imports — Instrukcja (.NET Namespace i Type)

Inne zasoby

Odpowiadanie na zdarzenia automatyzacji

Odpowiadanie na zdarzenia (projekty Visual Basic oraz Visual C#)