EventList. AddAdvise-Methode (Visio)EventList.AddAdvise method (Visio)

Fügt der EventList-Auflistung **** des Source-Objekts, dessen Ereignisse Sie empfangen möchten, ein Event -Objekt hinzu.Adds an Event object to the EventList collection of the source object whose events you want to receive. Wenn ausgewählte Ereignisse auftreten, wird das sink-Objekt vom Quellobjekt benachrichtigt.When selected events occur, the source object notifies your sink object.

SyntaxSyntax

Ausdruck.expression. AddAdvise( _EventCode_ , _SinkIUnkOrIDisp_ , _IIDSink_ , _TargetArgs_ )

Ausdruck Eine Variable, die ein EventList -Objekt darstellt.expression A variable that represents an EventList object.

ParameterParameters

NameName Erforderlich/OptionalRequired/Optional DatentypData type BeschreibungDescription
EventCodeEventCode ErforderlichRequired IntegerInteger Die Ereignisse, die Benachrichtigungen generieren.The event(s) that generate notifications.
SinkIUnkOrIDispSinkIUnkOrIDisp ErforderlichRequired VariantVariant Ein Verweis auf eine COM-Schnittstelle im Objekt, das Ereignisbenachrichtigungen empfangen soll.A reference to a COM interface on the object that is to receive event notifications.
IIDSinkIIDSink RequiredRequired StringString Reserviert für zukünftige Verwendung.Reserved for future use. Muss "" sein.Must be "".
TargetArgsTargetArgs RequiredRequired StringString Die Zeichenfolge, die an das Event -Objekt übergeben wird, um die zugehörige TargetArgs -Eigenschaft festzulegen.The string that is passed to your Event object to set its TargetArgs property.

RückgabewertReturn value

EreignisEvent

BemerkungenRemarks

Mit der AddAdvise- **** Methode erstellte Ereignis Objekte verfügen über eine Action -Eigenschaft von visActCodeAdvise.Event objects created with the AddAdvise method have an Action property of visActCodeAdvise. Sie sind nicht permanent, das heißt, sie können nicht mit einem Visio-Dokument erstellt werden und müssen zur Laufzeit erneut erstellt werden.They are not persistent, that is, they cannot be stored with a Visio document and must be re-created at run time.

Das Source-Objekt **** , dessen EventList-Auflistung das Event -Objekt enthält, legt den Bereich fest, in dem die Ereignisse gemeldet werden.The source object whose EventList collection contains the Event object establishes the scope in which the events are reported. Ereignisse werden für das Quellobjekt und untergeordnete Objekte in der Objektmodellhierarchie gemeldet.Events are reported for the source object and objects lower in the object model hierarchy. Um beispielsweise eine Benachrichtigung zu erhalten, wenn ein bestimmtes Dokument gespeichert wird, fügen Sie ein Event -Objekt für das DocumentSaved -Ereignis zur EventList -Auflistung dieses Dokuments hinzu.For example, to receive notification when a particular document is saved, add an Event object for the DocumentSaved event to the EventList collection of that document. Um benachrichtigt zu werden, wenn ein beliebiges Dokument in einer Instanz der Anwendung geöffnet wird, fügen Sie das Event-Objekt der EventList-Auflistung dss Application-Objekts hinzu.To receive notification when any document is opened in an instance of the application, add the Event object to the EventList collection of the Application object.

Das Erstellen von Event -Objekten ist eine gängige Methode zum Behandeln von Ereignissen aus C++ oder anderen nicht Microsoft Visual Basic-Lösungen.Creating Event objects is a common way to handle events from C++ or other non-Microsoft Visual Basic solutions. Wenn Sie das Visual Basic WithEvents -Schlüsselwort verwenden, um Ereignisse zu behandeln, werden alle Ereignisse im Ereignissatz eines Quellobjekts ausgelöst.When you use the Visual Basic WithEvents keyword to handle events, all the events in a source object's event set fire. Wenn Sie jedoch Event-Objekte zum Behandeln von Ereignissen erstellen, wird Ihr Programm nur über die von Ihnen ausgewählten Ereignisse benachrichtigt.When you create Event objects to handle events, however, your program will only be notified of the events you select. Je nach Lösung kann dies zu einer Leistungsverbesserung führen.Depending on your solution, this may result in improved performance.

Das EventCode -Argument ist häufig eine Kombination von Konstanten.The EventCode argument is often a combination of constants. VisEvtMod + visEvtCell ist beispielsweise der Ereigniscode für das Cello -Ereignis.For example, visEvtMod + visEvtCell is the event code for the CellChanged event. Ereigniskonstanten werden von der Visio-Typbibliothek deklariert und erhalten das Präfix visEvt.Event constants are declared by the Visio type library and are prefixed with visEvt. Informationen zum Suchen eines Ereigniscodes für das Ereignis, das Sie erstellen möchten, finden Sie unter Ereigniscodes.To find an event code for the event that you want to create, see Event codes.

Die an die AddAdvise **** -Methode übergebenen Argumente legen die Anfangswerte der Ereignis ****-, Action (visCodeRunAddAdvise)-und TargetArgs -Eigenschaften des Ereignis Objekts fest.The arguments passed to the AddAdvise method set the initial values of the Event object's Event, Action (visCodeRunAddAdvise), and TargetArgs properties.

Ab Visio 2002 können mithilfe von Ereignisfiltern die Ereignisse, die Sie in Ihrem Programm empfangen, genauer gefiltert werden.Beginning with Visio 2002, you can use event filters to refine the events that you receive in your program. Sie können Ereignisse nach Objekt, Zelle, Zellbereichen oder Befehls-ID filtern.You can filter events by object, cell, ranges of cells, or command ID. Ausführliche Informationen zur Verwendung von Ereignis Filtern finden Sie in den Methoden Themen mit **** dem Präfix SetFilter und getFilter. ****For details about using event filters, see the method topics prefixed with SetFilter and GetFilter.

Mit der AddAdvise- **** Methode erstellte Ereignis Objekte verfügen über eine Action -Eigenschaft von visActCodeAdvise.Event objects created with the AddAdvise method have an Action property of visActCodeAdvise. Sie sind nicht permanent, das heißt, sie können nicht mit einem Visio-Dokument erstellt werden und müssen zur Laufzeit erneut erstellt werden.They are not persistent, that is, they cannot be stored with a Visio document and must be re-created at run time.

Das Source-Objekt **** , dessen EventList-Auflistung das Event -Objekt enthält, legt den Bereich fest, in dem die Ereignisse gemeldet werden.The source object whose EventList collection contains the Event object establishes the scope in which the events are reported. Ereignisse werden für das Quellobjekt und untergeordnete Objekte in der Objektmodellhierarchie gemeldet.Events are reported for the source object and objects lower in the object model hierarchy. Um beispielsweise eine Benachrichtigung zu erhalten, wenn ein bestimmtes Dokument gespeichert wird, fügen Sie ein Event -Objekt für das DocumentSaved -Ereignis zur EventList -Auflistung dieses Dokuments hinzu.For example, to receive notification when a particular document is saved, add an Event object for the DocumentSaved event to the EventList collection of that document. Um benachrichtigt zu werden, wenn ein beliebiges Dokument in einer Instanz der Anwendung geöffnet wird, fügen Sie das Event-Objekt der EventList-Auflistung dss Application-Objekts hinzu.To receive notification when any document is opened in an instance of the application, add the Event object to the EventList collection of the Application object.

Das Erstellen von Event -Objekten ist eine gängige Methode zum Behandeln von Ereignissen aus C++ oder anderen nicht Microsoft Visual Basic-Lösungen.Creating Event objects is a common way to handle events from C++ or other non-Microsoft Visual Basic solutions. Wenn Sie das Visual Basic WithEvents -Schlüsselwort verwenden, um Ereignisse zu behandeln, werden alle Ereignisse im Ereignissatz eines Quellobjekts ausgelöst.When you use the Visual Basic WithEvents keyword to handle events, all the events in a source object's event set fire. Wenn Sie jedoch Event-Objekte zum Behandeln von Ereignissen erstellen, wird Ihr Programm nur über die von Ihnen ausgewählten Ereignisse benachrichtigt.When you create Event objects to handle events, however, your program will only be notified of the events you select. Je nach Lösung kann dies zu einer Leistungsverbesserung führen.Depending on your solution, this may result in improved performance.

Das EventCode -Argument ist häufig eine Kombination von Konstanten.The EventCode argument is often a combination of constants. VisEvtMod + visEvtCell ist beispielsweise der Ereigniscode für das Cello -Ereignis.For example, visEvtMod + visEvtCell is the event code for the CellChanged event. Ereigniskonstanten werden von der Visio-Typbibliothek deklariert und erhalten das Präfix visEvt.Event constants are declared by the Visio type library and are prefixed with visEvt. Informationen zum Suchen eines Ereigniscodes für das Ereignis, das Sie erstellen möchten, finden Sie unter Ereigniscodes.To find an event code for the event that you want to create, see Event codes.

Die an die AddAdvise **** -Methode übergebenen Argumente legen die Anfangswerte der Ereignis ****-, Action (visCodeRunAddAdvise)-und TargetArgs -Eigenschaften des Ereignis Objekts fest.The arguments passed to the AddAdvise method set the initial values of the Event object's Event, Action (visCodeRunAddAdvise), and TargetArgs properties.

Ab Visio 2002 können mithilfe von Ereignisfiltern die Ereignisse, die Sie in Ihrem Programm empfangen, genauer gefiltert werden.Beginning with Visio 2002, you can use event filters to refine the events that you receive in your program. Sie können Ereignisse nach Objekt, Zelle, Zellbereichen oder Befehls-ID filtern.You can filter events by object, cell, ranges of cells, or command ID. Ausführliche Informationen zur Verwendung von Ereignis Filtern finden Sie in den Methoden Themen mit **** dem Präfix SetFilter und getFilter. ****For details about using event filters, see the method topics prefixed with SetFilter and GetFilter.

Behandeln von Ereignisbenachrichtigungen in Microsoft Visual Basic oder Visual Basic für Applikationen für Ihr ProgrammEnabling your program to handle event notifications from Microsoft Visual Basic or Visual Basic for Applications

Um Benachrichtigungen zu verarbeiten, sollten Sie ein Klassenmodul erstellen, das die IVisEventProc -Schnittstelle implementiert, und dann eine Instanz dieser Klasse erstellen, die als Argument an die AddAdvise-Methode übergeben wird. ****To handle notifications, you should create a class module that implements the IVisEventProc interface and then create an instance of this class to pass as an argument to the AddAdvise method.

Die IVisEventProc -Schnittstelle enthält eine einzelne Funktion mit der folgenden Deklaration:The IVisEventProc interface contains a single function with the following declaration:

Implements IVisEventProc 
 
Private Function IVisEventProc_VisEventProc( _  
    ByVal nEventCode As Integer, _  
    ByVal pSourceObj As Object, _  
    ByVal nEventID As Long, _  
    ByVal nEventSeqNum As Long, _  
    ByVal pSubjectObj As Object, _  
    ByVal vMoreInfo As Variant) As Variant  
End Function

Im folgenden finden Sie eine Beschreibung der Argumente für VisEventProc.Following are descriptions of the arguments to VisEventProc.

* * Argument * *** Argument** * * Beschreibung * *** Description**
nEventCodenEventCode Die aufgetretenen Ereignisse.The event(s) that occurred. Sie können für jedes Ereignis ein anderes Objekt bereitstellen, oder ein einziges Objekt, das alle Benachrichtigungen empfängt und intern in Abhängigkeit von nEventCode umgeschaltet wird.You can provide a distinct object for each event or provide a single object that receives all notifications and switches internally based on nEventCode.
pSourceObjpSourceObj Das Objekt, **** dessen EventList-Auflistung das Event -Objekt enthält, das die Benachrichtigung ausgelöst hat.The object whose EventList collection contains the Event object that triggered the notification.
nEventIDnEventID Der eindeutige Bezeichner des Event -Objekts in der EventList -Auflistung.The unique identifier of the Event object within the EventList collection. (Im Gegensatz zur Index -Eigenschaft der EventList -Auflistung wird nEventID nicht geändert, wenn Ereignis Objekte der Auflistung hinzugefügt oder aus ihr gelöscht werden.) Sie können das Event -Objekt mithilfe des folgenden Codes aus VisEventProc abrufen:(Unlike the Index property of the EventList collection, nEventID does not change as Event objects are added to or deleted from the collection.) You can get the Event object from VisEventProc by using the following code:
pSourceObj .EventList.ItemFromID(nEventID )

| | nEventSeqNum | Die Ordnungsposition des Ereignisses in Bezug auf die Abfolge der Ereignisse, die in der aufrufenden Instanz der Anwendung aufgetreten sind.| | nEventSeqNum| The ordinal position of the event with respect to the sequence of events that have occurred in the calling instance of the application. Das erste Ereignis, das in einer Visio-Instanz auftritt, weist die Sequenznummer 1 auf, das zweite Ereignis die Nummer 2 usw.The first event that occurs in a Visio instance has a sequence number of 1, the second event 2, and so forth. In einigen Fällen können Sie die Sequenznummer in Verbindung mit der EventInfo -Eigenschaft verwenden, um weitere Informationen zum Ereignis zu erhalten. | | pSubjectObj | Das Objekt, zu dem das Ereignis gehört.In some cases, you can use the sequence number in conjunction with the EventInfo property to obtain more information about the event.| | pSubjectObj| The object that the event is about. Beispielsweise ist der Betreff eines ShapeAdded -Ereignisses ein Shape -Objekt, das die soeben hinzugefügte Form darstellt, während der Betreff eines BeforeSelectionDelete -Ereignisses ein Selection -Objekt ist, in dem die Formen, die gerade sein werden, gelöscht werden ausgewählt. | | vMoreInfo | Weitere Informationen zum Betreff des Ereignisses.For example, the subject of a ShapeAdded event is a Shape object representing the shape that was just added, while the subject of a BeforeSelectionDelete event is a Selection object in which the shapes that are about to be deleted are selected.| | vMoreInfo| Additional information about the subject of the event. Für viele Ereignisse handelt es sich dabei um eine Zeichenfolge, die der Befehlszeile ähnelt, an die von der Anwendung die ausgeführten Add-Ons übergeben werden.For many events, it is a string similar to the command line the application passes the add-ons it executes. Falls die Benachrichtigung keine zusätzlichen Informationen enthält, ist dieser Parameter auf Nothing festgelegt.If the notification does not include additional information, this parameter is set to Nothing. Ausführliche Informationen zu den Benachrichtigungs Parametern für ein bestimmtes Ereignis finden Sie unter dem jeweiligen Ereignis Thema in dieser Referenz. |For details about notification parameters for a particular event, see the particular event topic in this reference.|

Wenn nEventCode ein Abfrageereignis (Ereignisse mit dem Präfix " Query") identifiziert, geben Sie true zurück, um das Ereignis abzubrechen, und false , um es zuzulassen.If nEventCode identifies a query event (events prefixed with Query), return True to cancel the event, and False to allow it to happen. Der Wert ist für andere Ereignisse willkürlich.The value is arbitrary for other events. Wenn kein expliziter Wert zurückgegeben wird, gibt Microsoft Visual Basic für Applikationen (VBA) eine leere Variantezurück, die Visio als falseinterpretiert.If no explicit value is returned, Microsoft Visual Basic for Applications (VBA) returns an empty Variant, which Visio interprets as False.

Die Verbindung zwischen dem Quellobjekt und dem Event -Objekt ist vorhanden, bis eines der folgenden Ereignisse auftritt:The connection between the source object and the Event object exists until one of the following occurs:

  • Das Programm löscht das Event -Objekt.The program deletes the Event object.

  • Der letzte Verweis auf das Quellobjekt wird vom Programm freigegeben.The program releases the last reference to the source object. (Die EventList -Auflistung und die Event -Objekte enthalten einen Verweis auf Ihr Quellobjekt.)(The EventList collection and Event objects hold a reference on their source object.)

  • Die Anwendung wird beendet.The application terminates.

Beginnend mit Visio 2000 wird VisEventProc als Funktion definiert, die einen Wert zurückgibt.Beginning with Visio 2000, VisEventProc is defined as a function that returns a value. Visio betrachtet jedoch nur Rückgabewerte von Aufrufen an VisEventProc , die einem Abfrageereignis Code übergeben werden.However, Visio only looks at return values from calls to VisEventProc that are passed a query event code. Ereignis Objekte, die VisEventProc über IDispatch bereitstellen, erfordern keine Änderung.Event objects that provide VisEventProc through IDispatch require no change. Um vorhandene Ereignishandler so zu ändern, dass sie Abfrageereignisse ausführen können, ändern Sie die Sub-Prozedur in eine Function-Prozedur, und geben Sie den entsprechenden Wert zurück.To modify existing event handlers so that they can handle query events, change the Sub procedure to a Function procedure and return the appropriate value. (Weitere Informationen zu Abfrageereignissen finden Sie in dieser Referenz in Ereignisthemen mit dem Präfix Query.)(For details about query events, see this reference for event topics prefixed with Query.)

BeispielExample

Dieses Beispiel zeigt, wie Sie ein Klassenmodul zum Behandeln von Ereignissen erstellen, die von einem Quellobjekt in Microsoft Office Visio ausgelöst werden, beispielsweise vom Document -Objekt.This example shows how to create a class module to handle events fired by a source object in Microsoft Office Visio, for example, the Document object. Das Modul besteht aus der VisEventProc-Funktion, die einen Select Case-Block zum Überprüfen von drei Ereignissen verwendet: DocumentSaved, PageAdded und ShapesDeleted.The module consists of the function VisEventProc, which uses a Select Case block to check for three events: DocumentSaved, PageAdded, and ShapesDeleted. Andere Ereignisse fallen unter den Standardfall (Case Else).Other events fall under the default case (Case Else). Jeder Case -Block konstruiert eine Zeichenfolge ( strMessage ), die den Namen und den Ereigniscode des ausgelösten Ereignisses enthält.Each Case block constructs a string ( strMessage ) that contains the name and event code of the event that fired. Schließlich wird die Zeichenfolge von der Funktion im Direktfenster angezeigt.Finally, the function displays the string in the Immediate window.

Kopieren Sie diesen Beispielcode in ein neues Klassenmodul in Microsoft Visual Basic für Anwendungen (VBA) oder Visual Basic, und benennen Sie das Modul clsEventSink.Copy this sample code into a new class module in Microsoft Visual Basic for Applications (VBA) or Visual Basic, naming the module clsEventSink. Anschließend können Sie das folgende Ereignis Senk Modul verwenden, um eine Instanz der clsEventSink -Klasse und Ereignis Objekte zu erstellen, die Benachrichtigungen über Ereignis Auslösungen an die Klasseninstanz senden.You can then use the event-sink module that follows to create an instance of the clsEventSink class and Event objects that send notifications of event firings to the class instance.

Implements Visio.IVisEventProc  
 
'Declare visEvtAdd as a 2-byte value 
'to avoid a run-time overflow error 
Private Const visEvtAdd% = &H8000 
 
Private Function IVisEventProc_VisEventProc( _  
    ByVal nEventCode As Integer, _  
    ByVal pSourceObj As Object, _  
    ByVal nEventID As Long, _  
    ByVal nEventSeqNum As Long, _  
    ByVal pSubjectObj As Object, _  
    ByVal vMoreInfo As Variant) As Variant  
 
    Dim strMessage As String 
     
    'Find out which event fired 
    Select Case nEventCode  
        Case visEvtCodeDocSave  
            strMessage = "DocumentSaved (" & nEventCode & ")"  
        Case (visEvtPage + visEvtAdd)  
            strMessage = "PageAdded (" & nEventCode & ")"  
        Case visEvtCodeShapeDelete 
            strMessage = "ShapesDeleted(" & nEventCode & ")"  
        Case Else  
            strMessage = "Other (" & nEventCode & ")"  
    End Select 
     
    'Display the event name and the event code 
    Debug.Print strMessage  
 
End Function

Das folgende VBA-Modul zeigt, wie die AddAdvise -Methode zum Senken von Ereignissen verwendet wird.The following VBA module shows how to use the AddAdvise method to sink events. Das Modul enthält zwei öffentliche Prozeduren.The module contains two public procedures.

Mit der CreateEventObjects -Prozedur wird eine Instanz einer Senke-Objekt (Ereignisbehandlungsmethode) mit dem Namen " clsEventSink " erstellt, die an die AddAdvise-Methode übergeben wird und Benachrichtigungen über Ereignisse empfängt. ****The CreateEventObjects procedure creates an instance of a sink-object (event-handling) class named clsEventSink that gets passed to the AddAdvise method, and that receives notifications of events. Darüber hinaus erstellt die Prozedur drei Event -Objekte zum Senden von Benachrichtigungen über die Auslösung von drei Ereignissen, die vom Document -Objekt an das Senke-objektbezogen werden: DocumentSaved, PageAddedund ShapesDeleted.In addition, the procedure creates three Event objects to send notifications of firings of three events sourced by the Document object to the sink object: DocumentSaved, PageAdded, and ShapesDeleted.

Mit der DeleteEventObjects -Prozedur werden diese Ereignisobjekte gelöscht, wenn Ihr Programm die Verwendung dieser Ereignisse abgeschlossen hat.The DeleteEventObjects procedure deletes these Event objects when your program is finished using them.

Die clsEventSink -Klasse implementiert die IVisEventProc -Schnittstelle.The clsEventSink class implements the IVisEventProc interface.

In diesem Beispiel wird davon ausgegangen, dass ein aktives Dokument im Visio-Anwendungsfenster vorhanden ist.The example assumes that there is an active document in the Visio application window.

Option Explicit 
 
Private mEventSink As clsEventSink 
 
Dim vsoDocumentEvents As Visio.EventList       
Dim vsoDocumentSavedEvent As Visio.Event  
Dim vsoPageAddedEvent As Visio.Event  
Dim vsoShapesDeletedEvent As Visio.Event 
    
'Declare visEvtAdd as a 2-byte value 
'to avoid a run-time overflow error 
Private Const visEvtAdd% = &H8000  
 
Public Sub CreateEventObjects()      
 
    'Create an instance of the clsEventSink class 
    'to pass to the AddAdvise method. 
    Set mEventSink = New clsEventSink 
  
    'Get the EventList collection of the active document. 
    Set vsoDocumentEvents = ActiveDocument.EventList  
 
    'Add Event objects that will send notifications. 
    'Add an Event object for the DocumentSaved event. 
    Set vsoDocumentSavedEvent= vsoDocumentEvents.AddAdvise( _  
     visEvtCodeDocSave, mEventSink, "", "Document saved...")  
 
    'Add an Event object for the PageAdded event. 
    Set vsoPageAddedEvent= vsoDocumentEvents.AddAdvise( _  
     visEvtAdd + visEvtPage, mEventSink, "", "Page added...")  
 
    'Add an Event object for the ShapesDeleted event. 
    Set vsoShapesDeletedEvent = vsoDocumentEvents.AddAdvise( _  
     visEvtCodeShapeDelete, mEventSink, "", "Shapes deleted...")  
 
End Sub   
 
Public Sub DeleteEventObjects()  
 
    'Delete the Event object for the DocumentSaved event.    
    vsoDocumentSavedEvent.Delete  
    Set vsoDocumentSavedEvent = Nothing 
 
    'Delete the Event object for the PageAdded event. 
    vsoPageAddedEvent.Delete  
    Set vsoPageAddedEvent = Nothing 
 
    'Delete the Event object for the ShapesDeleted event.  
    vsoShapesDeletedEvent.Delete  
    Set vsoShapesDeletedEvent = Nothing 
 
End Sub

Support und FeedbackSupport and feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation?Have questions or feedback about Office VBA or this documentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.