Sdílet prostřednictvím


Jak: zpracování událostí automatizace (Visual Basic)

Následující postup ukazuje, jak zpracovat události související se okno pomocí Visual Studio doplněk.

[!POZNÁMKA]

Dialogová okna a příkazy v nabídkách menu, které vidíte, se mohou lišit od těch popsaných v nápovědě, v závislosti na vašich aktivních nastaveních nebo edici.Tyto postupy byly vyvinuty s aktivní Obecné nastavení pro vývoj.Chcete-li změnit nastavení, zvolte Import and Export Settings v menu Nástroje.Další informace naleznete v tématu Nastavení aplikace Visual Studio.

Zpracování událostí okna pomocí jazyka Visual Basic

  1. Vytvoření Visual Studio projektu přidat pomocí Visual Basic.

  2. Ve třídě připojit inicializovat proměnné pro zpracování WindowEvents objektu a jiné proměnné pro uložení OutputWindowPane objektu.

    Public WithEvents winEvents As EnvDTE.WindowEvents
    Private outputWinPane As OutputWindowPane
    

    V tomto příkladu je proměnná s názvem winEvents.Ostatní objekty automatizace modelu se týkají jiných typů událostí.Například FindEvents se vztahuje na události související s operací, najít a TaskListEvents se vztahuje na události související s Seznam úkolů.Úplný seznam dostupných událostí, viz Reakce na události automatizace.

  3. V OnConnection metody je proměnná zachytit události initialize.V následujícím příkladu je tato proměnná s názvem události.

    Dim events As EnvDTE.Events
    events = _applicationObject.Events
    
  4. Načtení objektů událostí z automatizace modelu.

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

    Visual StudioMetoda zpracování automaticky připojí, protože používá deklaraci proměnné objektu WithEvents (Visual Basic) popisovač.

  5. Přidáte postupy pro každé události týkající se objektu události.Například chcete-li zpracovávat události, která nastane při zavření okna použijete:

    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
    

    U WindowEvents objekt musí mít postupy pro WindowActivated, WindowClosing, WindowCreated, a WindowMoved.V následujícím příkladu je uveden úplný kód.

  6. Konečně aby Visual Studio od zpomalení systému nadále sledovat události související se okno po ukončení v, zakázat zpracování událostí.V Visual Basic, to se provádí nastavením obslužné rutiny události na Nothing.

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

    Vypne se zpracování událostí doplněk vypnut nebo doplněk při běhu IDE vypnut.Při vypnutí IDE všechny spuštěné doplňky automaticky ukončeny první.

Příklad

Následující příklad je základní Visual Studio , který ukazuje, jak zachytit a zpracovat okna událostí v Visual Studio.Při výskytu události týkající se okna, je odeslána oznámení Výstup 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

Probíhá kompilace kódu

Tento kód kompilace, vytvořit nový Visual Studio přidat projekt v Visual Basic a nahraďte kód třídy připojit kód v příkladu.Informace o spuštění doplňku Postup: ovládání doplňky pomocí Správce doplňků.

Viz také

Úkoly

Jak: zpracování událostí automatizace (Visual C#)

Další zdroje

Reakce na události automatizace