Condividi tramite


Procedura: gestire gli eventi dell'ambiente nelle macro

In ogni nuovo progetto macro è incluso un modulo denominato EnvironmentEvents, visibile solo nell'IDE macro. Questo elemento modello contiene un'utile serie di routine eventi predefinite che è possibile implementare nelle macro. In particolare, in EnvironmentEvents sono incluse le routine seguenti:

È possibile visualizzare le routine evento nei visualizzatori oggetti nell'editor di codice.

Per inserire una routine eventi predefinita nella macro

  1. Nel riquadro Visualizzazione classi dell'IDE macro fare doppio clic sul nodo EnvironmentEvents per visualizzarlo come una scheda EnvironmentEvents e un menu a discesa nel riquadro dell'editor delle macro.

  2. Dal menu a discesa EnvironmentEvents selezionare un tipo di eventi, ad esempio TaskListEvents. La casella combinata Dichiarazioni viene popolata con gli eventi disponibili nell'Elenco attività.

  3. Dal menu a discesa Dichiarazioni selezionare un evento, ad esempio TaskAdded, per aggiungere la relativa routine eventi al modulo.

L'evento viene inserito nella macro ed è possibile aggiungere il codice alla routine eventi.

Se lo si desidera, è possibile aggiungere altre routine eventi alla casella combinata Nome classe, ad esempio gli eventi CommandEvents.

Aggiunta di una nuova routine eventi

Per aggiungere una nuova routine eventi alla casella combinata Nome classe

  1. Immettere una dichiarazione per l'evento dopo l'area nascosta del modulo EnvironmentEvents con l'etichetta "Automatically generated code, do not modify":

    <System.ContextStaticAttribute()> Public WithEvents CommandEvents As EnvDTE.CommandEvents
    ' This procedure handles DTEEvents.OnMacrosRuntimeReset.
    
  2. Impostare la routine OnMacrosRuntimeReset in modo che la nuova variabile di evento venga inizializzata ogni volta che la macro viene rieseguita:

    Public Sub DTEEvents_OnMacrosRuntimeReset() Handles _
      DTEEvents.OnMacrosRuntimeReset
       CommandEvents = DTE.Events.CommandEvents
    End Sub
    
  3. Impostare la routine OnStartupComplete per completare la procedura di inizializzazione del passaggio 5.

    Private Sub DTEEvents_OnStartupComplete() Handles_
      DTEEvents.OnStartupComplete
            CommandEvents = DTE.Events.CommandEvents
    End Sub
    
  4. Aggiungere il codice relativo alla risposta all'evento. In questo esempio, una volta eseguito il comando, la routine riporta i dettagli del comando emesso:

    Public Sub CommandEvents_AfterExecute(ByVal Guid As String, ByVal ID As Integer, ByVal CustomIn As Object, ByVal CustomOut as Object) Handles CommandEvents.AfterExecute
       MsgBox(DTE.Commands.Item(Guid, ID).Name)
    End Sub
    

Quando si dichiara un nuovo evento, prima di poterlo utilizzare è necessario inizializzarlo. Per le macro, la nuova variabile di evento deve essere inizializzata nella routine eventi OnMacrosRuntimeReset.

L'evento si verifica ogni volta che il runtime della macro viene reimpostato, ad esempio quando la macro viene caricata o scaricata. In tali circostanze si verifica una perdita delle informazioni di stato globale, in altre parole i valori delle variabili globali vengono persi e i gestori eventi vengono dissociati. Il codice che in precedenza veniva avviato al verificarsi di un evento, quindi, non viene più eseguito.

Quando il runtime di una macro viene reimpostato, viene generato l'evento OnMacrosRuntimeReset. che consente di reinizializzare automaticamente le variabili e i gestori eventi. OnMacrosRuntimeReset assicura che i valori dei gestori eventi e delle variabili vengano reinizializzati ogni volta che il runtime della macro viene reimpostato e quindi assicura il corretto funzionamento delle nuove routine eventi.

Vedere anche

Attività

Procedura: registrare macro

Procedura: eseguire macro

Procedura: registrare macro

Procedura: gestire macro

Procedura: fare riferimento a componenti COM e .NET Framework nelle macro

Concetti

Automazione di operazioni ripetitive tramite macro

Debug delle macro

Problemi di registrazione ed esecuzione delle macro

Problemi di sicurezza e di condivisione delle macro