Aracılığıyla paylaş


Nasıl yapılır: (Visual Basic) Otomasyon olayları işlemek

Aşağıdaki yordamı kullanarak pencere ile ilgili olayları işlemek gösteren bir Visual Studio eklentisi.

Not

Gördüğünüz iletişim kutuları ve menü komutları, etkin ayarlarınıza ve ürün sürümüne bağlı olarak Yardım menüsünde açıklanana göre farklılık gösterebilir.Bu yordamlar, genel geliştirme ayarları ile etkin geliştirilmiştir.Ayarlarınızı değiştirmek için Araçlar menüsünden İçeri ve Dışarı Aktarma Ayarları'nı seçin.Daha fazla bilgi için bkz. Visual Studio ayarları.

Visual Basic kullanarak pencere ile ilgili olayları işlemek için

  1. Oluşturma bir Visual Studio kullanarak eklenti projesinin Visual Basic.

  2. Connect sýnýfý içinde işlemek için bir değişkeni başlatmak WindowEvents nesnesi ve saklamak için başka bir değişken bir OutputWindowPane nesne.

    Public WithEvents winEvents As EnvDTE.WindowEvents
    Private outputWinPane As OutputWindowPane
    

    Bu örnekte, winEvents değişken adı verilir. Otomasyon modelindeki diğer nesneleri başka tür olaylar ilgilidir. Örneğin, FindEvents işlemleri bulmak için ilgili olaylar için geçerlidir ve TaskListEvents ilgili olayları uygulandığı Task List. Kullanılabilir olaylar tam listesi için bkz: Otomasyon olaylarını yanıtlama.

  3. De OnConnection yöntemi, bir değişkeni olayların ele alınması için başlatma. Aşağıdaki örnekte, olaylar bu değişken adı verilir.

    Dim events As EnvDTE.Events
    events = _applicationObject.Events
    
  4. Olay nesneleri Otomasyon modelinden almak.

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

    Visual StudioNesne değişken bildiriminde kullandığından yöntemi işleyicisi otomatik olarak bağlar WithEvents (Visual Basic) işleyicisi.

  5. Her olay için olay nesnesi ilgili yordamlar ekleyin. Örneğin, bir pencere kapatıldığında oluşan olayý iþlemek için kullanırsınız:

    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
    

    Durumunda WindowEvents nesne için yordamları olmalıdır WindowActivated, WindowClosing, WindowCreated, ve WindowMoved. Aşağıdaki örnekte tam kodu listelenir.

  6. Son olarak, önlemek için Visual Studio sisteminizin eklenti kapattıktan sonra pencere ile ilgili olayları izlemek devam ederseniz yavaşlatmalarını, olay işleme devre dışı. De Visual Basic, bu olay işleyicisi ayarlayarak yapılır Nothing.

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

    Eklentiyi kapatmak ya da eklenti çalışmayı sürdürürken IDE kapatma olay işleme devre dışı bırakır. Tüm çalışan eklentiler IDE kapatıldığında, ilk otomatik olarak bilgisayarı.

Örnek

Aşağıdaki örnek bir temel olan Visual Studio müdahale ve pencere ile ilgili olayları işlemek gösterilmiştir eklentisini Visual Studio. Pencere ile ilgili olaylar meydana geldiinde uyarı iletisi gönderilir Çıkış pencere.

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

Kod Derleniyor

Bu kodu derlemeye yeni bir oluşturmak Visual Studio eklenti projesi Visual Basic ve örnek kodu ile bağlan sınıfının kodunu değiştirin. Eklenti çalıştırma hakkında daha fazla bilgi için bkz: Nasıl yapılır: denetim Eklenti Yöneticisi'ni kullanarak eklentileri.

Ayrıca bkz.

Görevler

Nasıl yapılır: tanıtıcı Otomasyon olaylarýna (Visual C#)

Diğer Kaynaklar

Otomasyon olaylarını yanıtlama