Udostępnij za pośrednictwem


Porady: obsługa zdarzeń automatyzacji (Visual Basic)

W poniższej procedurze demonstruje, jak obsłużyć zdarzenia związane z okna za pomocą Visual Studio dodatek.

[!UWAGA]

Okien dialogowych i poleceń menu, którą widzisz mogą różnić się od tych opisanych w pomocy, w zależności od tego, aktywne ustawienia lub edition.Procedury te zostały opracowane z ogólnych ustawień rozwoju aktywnych.Aby zmienić ustawienia, wybierz polecenie Importuj i Eksportuj ustawienia na Narzędzia menu.Aby uzyskać więcej informacji, zobacz Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.

Do obsługi zdarzeń związanych z oknami przy użyciu języka Visual Basic

  1. Tworzenie Visual Studio -w projekcie przy użyciu Visual Basic.

  2. W klasie Połącz Zainicjuj zmienną do obsługi WindowEvents obiektu i innej zmiennej do przechowywania OutputWindowPane obiektu.

    Public WithEvents winEvents As EnvDTE.WindowEvents
    Private outputWinPane As OutputWindowPane
    

    W tym przykładzie zmienna o nazwie winEvents.Innych obiektów w modelu automatyzacji odnoszą się do innych typów zdarzeń.Na przykład FindEvents stosuje się do zdarzeń związanych z operacji, wyszukiwania i TaskListEvents stosuje się do zdarzeń związanych z Listy zadań.Aby uzyskać pełną listę dostępnych zdarzeń, zobacz Odpowiadanie na zdarzenia automatyzacji.

  3. W OnConnection metodę, zainicjować zmienną, aby przechwytywać zdarzenia.W poniższym przykładzie zmienna ta nosi nazwę zdarzenia.

    Dim events As EnvDTE.Events
    events = _applicationObject.Events
    
  4. Obiekty zdarzeń należy pobierać z modelu automatyzacji.

    winEvents = CType(events.WindowEvents(Nothing), EnvDTE.WindowEvents)
    

    Visual Studioautomatycznie łączy z obsługi metody, ponieważ używa deklaracja zmiennej obiektu WithEvents (Visual Basic) obsługi.

  5. Dodawanie procedury dla każdego zdarzenia związane z obiektu zdarzenia.Na przykład aby obsłużyć zdarzenia, który występuje po zamknięciu okna, należy użyć:

    Private Sub windowsEvents_WindowClosing(ByVal Window As _
    EnvDTE.Window) Handles winEvents.WindowClosing
        outputWinPane.OutputString("WindowEvents.WindowClosing" & _
        ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab & "Window: " & _
        Window.Caption & ControlChars.Lf)
    End Sub
    

    W odniesieniu do WindowEvents obiektu, musi mieć procedury WindowActivated, WindowClosing, WindowCreated, i WindowMoved.Kompletny kod znajduje się w poniższym przykładzie.

  6. Wreszcie Aby zapobiec Visual Studio spowalniały one systemu poprzez kontynuowanie monitorowania zdarzeń związanych z okna, po zamknięciu dodatku, należy wyłączyć obsługę zdarzeń.W Visual Basic, jest to realizowane przez ustawienie obsługi zdarzeń Nothing.

    Public Sub OnDisconnection(ByVal disconnectMode As _
    ext_DisconnectMode, ByRef custom As Array) Implements _
    IDTExtensibility2.OnDisconnection
        winEvents = Nothing
    End Sub
    

    Ta opcja powoduje wyłączenie obsługi zdarzeń, czy dodatek jest zamknięty lub IDE jest zamknięty, podczas gdy nadal jest uruchomiony dodatek.Podczas zamykania IDE wszystkie uruchomione dodatki są automatycznie zamknięty pierwszej.

Przykład

Poniższy przykład stanowi podstawowy Visual Studio dodatek, który demonstruje, jak przechwycić i obsługi zdarzeń związanych z okna w Visual Studio.W każdym przypadku, gdy wystąpią zdarzenia związane z okna, komunikat z powiadomieniem jest wysyłana do produkcji okna.

Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80

Public Class Connect
    Implements IDTExtensibility2
    ' Handle window events.
    Public WithEvents winEvents As EnvDTE.WindowEvents
    Private outputWinPane As OutputWindowPane

    Dim _applicationObject As DTE2
    Dim _addInInstance As AddIn

    Public Sub OnConnection(ByVal application As Object, ByVal _
    connectMode As ext_ConnectMode, ByVal addInInst As Object, ByRef _
    custom As Array) Implements IDTExtensibility2.OnConnection
        _applicationObject = CType(application, DTE2)
        _addInInstance = CType(addInInst, AddIn)

        Dim events As EnvDTE.Events
        events = _applicationObject.Events
        ' 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( _
           "DTE Event Information")

        ' Retrieve the event objects from the automation model.
        ' Visual Basic automatically connects the method handler 
        ' because the object variable declaration uses the 'WithEvents'
        ' handler.
        winEvents = CType(events.WindowEvents(Nothing), _
        EnvDTE.WindowEvents)
    End Sub

    ' Handle all window-related events.
    Private Sub windowsEvents_WindowActivated(ByVal GotFocus As _
    EnvDTE.Window, ByVal LostFocus As EnvDTE.Window) Handles _
    winEvents.WindowActivated
        outputWinPane.OutputString("WindowEvents.WindowActivated" & _
        ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab  _
        & "Window receiving focus: " & GotFocus.Caption  _
        & ControlChars.Lf)
        outputWinPane.OutputString _
        (ControlChars.Tab & "Window that lost focus: " _
        & LostFocus.Caption & ControlChars.Lf)
    End Sub

    Private Sub windowsEvents_WindowClosing(ByVal Window As _
    EnvDTE.Window) Handles winEvents.WindowClosing
        outputWinPane.OutputString("WindowEvents.WindowClosing" & _
        ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab & "Window: " & _
        Window.Caption & ControlChars.Lf)
    End Sub

    Private Sub windowsEvents_WindowCreated(ByVal Window As _
    EnvDTE.Window) Handles winEvents.WindowCreated
        outputWinPane.OutputString("WindowEvents.WindowCreated" & _
        ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab & "Window: " & _
        Window.Caption & ControlChars.Lf)
    End Sub

    Private Sub windowsEvents_WindowMoved(ByVal Window As _
    EnvDTE.Window, ByVal Top As Integer, ByVal Left As Integer, ByVal _
    [Width] As Integer, ByVal Height As Integer) Handles _
    winEvents.WindowMoved
        outputWinPane.OutputString("WindowEvents.WindowMoved" & _
        ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab & "Window: " & _
        Window.Caption & ControlChars.Lf)
        outputWinPane.OutputString(ControlChars.Tab & "Location: (" & _
        Top.ToString() & " , " & Left.ToString() & " , " & _
        Width.ToString() & " , " & Height.ToString() & ")" & _
        ControlChars.Lf)
    End Sub

    Public Sub OnDisconnection(ByVal disconnectMode As _
    ext_DisconnectMode, ByRef custom As Array) Implements _
    IDTExtensibility2.OnDisconnection
        ' Turns off window event handling when the add-in shuts down.
        winEvents = Nothing
    End Sub

    Public Sub OnAddInsUpdate(ByRef custom As Array) Implements _
    IDTExtensibility2.OnAddInsUpdate
    End Sub

    Public Sub OnStartupComplete(ByRef custom As Array) Implements _
    IDTExtensibility2.OnStartupComplete
    End Sub

    Public Sub OnBeginShutdown(ByRef custom As Array) Implements _
    IDTExtensibility2.OnBeginShutdown
    End Sub
End Class

Kompilowanie kodu

Aby skompilować kod, Utwórz nowy Visual Studio dodatek projektu w Visual Basic i Zastąp kod w przykładzie kodu klasy Połącz.Aby uzyskać informacje o sposobach uruchamiania dodatku, zobacz Porady: kontrolowanie dodatków za pomocą menedżera dodatków.

Zobacz też

Zadania

Porady: obsługa zdarzeń automatyzacji (Visual C#)

Inne zasoby

Odpowiadanie na zdarzenia automatyzacji