Condividi tramite


Procedura: gestire eventi tramite macro

Quando si crea una nuova macro, per impostazione predefinita viene aggiunto un modulo denominato EnvironmentEvents. Tramite questo modulo vengono predefiniti molti oggetti evento descritti nella tabella contenuta in Risposta a eventi di automazione, pertanto non è necessario eseguire tale operazione manualmente. Se si desidera gestire un evento non presente nel modulo EnvironmentEvents, è possibile aggiungerlo. Per informazioni dettagliate su questa operazione, vedere Procedura: gestire gli eventi dell'ambiente nelle macro.

Di seguito viene illustrato come utilizzare una macro per gestire eventi correlati a una finestra degli strumenti, in questo caso l'elenco attività.

Nota

È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma. Queste procedure sono state sviluppate con le Impostazioni generali per lo sviluppo attive. Per modificare le impostazioni, scegliere Importa/Esporta Impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Gestione delle impostazioni.

Per gestire gli eventi correlati a una finestra degli strumenti

  1. Aggiungere il codice riportato di seguito al modulo EnvironmentEvents nell'IDE macro.

  2. Eseguire la macro.

    Gli eventi dell'elenco attività vengono gestiti mentre la macro aggiunge e rimuove elementi da tale elenco.

Esempio

Nell'esempio di macro riportato di seguito viene illustrato come rispondere a un evento utilizzando gli oggetti evento del modello di automazione di Visual Studio. Nell'esempio vengono aggiunte e rimosse attività dall'elenco attività in risposta agli eventi presenti nei gestori eventi.

' Macro code.
Public Module EnvironmentEvents

   Public Sub TaskListEvents_TaskAdded(ByVal TaskItem As _
   EnvDTE.TaskItem) Handles TaskListEvents.TaskAdded
      MsgBox("A task named '" & TaskItem.Description & "' was added _
      to the Task List.")
      ' Put other code here that you want to execute when this 
      ' event occurs.
   End Sub

   Public Sub TaskListEvents_TaskRemoved(ByVal TaskItem As _
   EnvDTE.TaskItem) Handles TaskListEvents.TaskRemoved
      MsgBox("A task named '" & TaskItem.Description & "' was _
      removed from the Task List.")
      ' Put other code here that you want to execute when this 
      ' event occurs.
   End Sub
End Module

Sub EventsExample()
    ' Add items to and remove items from the Task List.
    Dim TL As TaskList = dte.ToolWindows.TaskList
    Dim TLItem As taskitem

    ' Add a couple of tasks to the Task List.
    TLItem = TL.TaskItems.Add(" ", " ", "Test task 1.", _
    vsTaskPriority.vsTaskPriorityHigh, vsTaskIcon.vsTaskIconUser, _
    True, , 10, , )
    TLItem = TL.TaskItems.Add(" ", " ", "Test task 2.", _
    vsTaskPriority.vsTaskPriorityLow, vsTaskIcon.vsTaskIconComment, _
    , , 20, , )

    ' List the total number of task list items after adding the new 
    ' task items.
    MsgBox("Task Item 1 description: " & _
    TL.TaskItems.Item(2).Description)
    MsgBox("Total number of task items: " & TL.TaskItems.Count)

    ' Remove the second task item. The items list in reverse numeric 
    ' order.
    MsgBox("Deleting the second task item")
    TL.TaskItems.Item(1).Delete()
    MsgBox("Total number of task items: " & TL.TaskItems.Count)
End Sub

Per rispondere a eventi nei componenti aggiuntivi, inizializzare il gestore eventi nell'evento OnConnectionMethod. Di seguito è riportato un esempio:

Public Class Class1
   Implements IDTExtensibility2
   Dim objEventsClass As EventsClass

   Public Sub OnConnection(ByVal Application As Object, ByVal _
   ConnectMode As EnvDTE.ext_ConnectMode, ByVal AddInInst As _
   Object, ByRef custom() As Object) Implements _
   EnvDTE.IDTExtensibility2.OnConnection
      objEventsClass = New EventsClass()
      objEventsClass.TaskListEvents = _
      _applicationObj.Events.TaskListEvents
   End Sub
End Class

Public Class EventsClass
   Public WithEvents TaskListEvents As EnvDTE.TaskListEvents

   Private Sub TaskListEvents_TaskAdded(ByVal TaskItem As _
   EnvDTE.TaskItem) Handles TaskListEvents.TaskAdded
      MsgBox("A task named '" & TaskItem.Description & "' was added _
      to the Task List.")
      ' Put any other code here that you want to execute when this 
      ' event occurs.
   End Sub
End Class

Vedere anche

Altre risorse

Risposta agli eventi (progetti Visual Basic e Visual C#)