Application.MarkerEvent 事件 (Visio)

由调用 QueueMarkerEvent 方法引起。

语法

表达式MarkerEvent (应用SequenceNumContextString)

expression:表示 Application 对象的变量。

参数

名称 必需/可选 数据类型 说明
应用程序 必需 [IVAPPLICATION] Microsoft Visio 的活动实例。
SequenceNum 必需 Long 此事件相对于过去事件的序号位置。
ContextString 必需 字符串 QueueMarkerEvent 方法传递的上下文字符串。

备注

与 Visio 触发的其他事件不同,MarkerEvent 事件由客户端程序触发。 仅当客户端程序调用 QueueMarkerEvent 方法时,它才接收 MarkerEvent 事件。

通过将 MarkerEvent 事件与 QueueMarkerEvent 方法一起使用,客户端程序可将事件排入自己的队列中。 在调用 QueueMarkerEvent 时,客户端程序等待 Visio 触发其事件队列中现有的所有事件后接收 MarkerEvent 事件。

MarkerEvent 事件将 QueueMarkerEvent 方法传递的上下文字符串和 MarkerEvent 事件的序列号传递给 MarkerEvent 事件处理程序。 这两个值中的任何一个都可用于将 QueueMarkerEvent 调用与 MarkerEvent 事件相关联。 这样,客户端程序就能将由它引起的事件与其他不是由它引起的事件区分开。

例如,更改 Visio 单元格值的客户端程序可能只想响应不是由它引起的 CellChanged 事件。 客户端程序可以首先调用 QueueMarkerEvent 方法,并传递上下文字符串供稍后使用,以括号括起其处理范围。

 
vsoObject.QueueMarkerEvent "ScopeStart" 
 <My program changes cells here> 
vsoObject.QueueMarkerEvent "ScopeEnd" 

MarkerEvent 事件处理程序中,客户端程序随后可以使用传递给 QueueMarkerEvent 方法的上下文字符串来标识它引发的 CellChanged 事件。

 
Dim blsICausedCellChanges as Boolean 
 
Private Sub vsoObject_MarkerEvent (ByVal vsoApplication As Visio.IVApplication, _ 
 ByVal lngSequenceNum As Long, ByVal strContextString As String) 
 
 If strContextString = "ScopeStart" Then 
 blsICausedCellChanges = True 
 ElseIf strContextString = "ScopeEnd" Then 
 blsICausedCellChanges = "False" 
 End If 
 
End Sub 
 
Private Sub vsoObject_CellChanged (ByVal Cell As Visio.IVCell) 
 
 'Respond only if this client didn't cause a cell change. 
 If blsICausedCellChanges = False Then 
 <respond to the cell changes> 
 End If 
 
End Sub

如果您使用 Microsoft Visual Basic 或 Visual Basic for Applications (VBA),则此主题中的语法描述的是一种通用而有效的事件处理方法。

如果要创建自己的 Event 对象,请使用 AddAddAdvise 方法。

若要创建可运行加载项的 Event 对象,请使用 Add 方法,因为它适用于 EventList 集合。

若要创建可接收通知的 Event 对象,请使用 AddAdvise 方法。

若要查找要创建的事件的事件代码,请参阅事件代码

如果要从接收通知的程序处理此事件,MarkerEvent 事件是一组在 Application 对象的 EventInfo 属性中记录额外信息的事件之一。

如上所述,EventInfo 属性返回 ContextStringVisEventProcvarMoreInfo 参数将为空。

示例

此示例示范如何使用 MarkerEvent 事件标记事件队列中的事件。

将此示例代码粘贴到 ThisDocument 代码窗口中,然后运行 UseMarker。 输出显示在“即时”窗口中。

 
Dim WithEvents vsoApplication As Visio.Application 
 
Private Sub vsoApplication_MarkerEvent(ByVal app As Visio.IVApplication, _ 
 ByVal lngSequenceNum As Long, ByVal strContextString As String) 
 Debug.Print "Marker: " & app.EventInfo(0) 
 
End Sub 
 
Private Sub vsoApplication_ShapeAdded(ByVal vsoShape As Visio.IVShape) 
 Debug.Print " ShapeAdded: " & vsoShape.Name 
 
End Sub 
 
Public Sub UseMarker() 
 
 Set vsoApplication = ThisDocument.Application 
 
 'MarkerEvent events can be used to comment a segment 
 'of events in the queue. 
 vsoApplication.QueueMarkerEvent "I am starting..." 
 ActivePage.DrawRectangle 0, 0, 3, 3 
 vsoApplication.QueueMarkerEvent "I am finished..." 
 
End Sub

“立即”窗口中的输出如下所示:

Marker: I am starting...

ShapeAdded: Sheet.1

Marker: I am finished...

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。