IVisEventProc.VisEventProc 方法 (Visio)
IVisEventProc 的专用成员函数,用于处理 EventList.AddAdvise 方法传递给它的事件通知。
语法
表达式。VisEventProc (nEventCode、 pSourceObj、 nEventID、 nEventSeqNum、 pSubjectObj、 vMoreInfo)
表达 一个代表 IVisEventProc 对象的变量。
参数
名称 | 必需/可选 | 数据类型 | 说明 |
---|---|---|---|
nEventCode | 必需 | Integer | 发生的事件。 |
pSourceObj | 必需 | Object | 对象,其 EventList 集合包含发送通知的 Event 对象。 |
nEventID | 必需 | Long | Event 对象在 EventList 集合内的唯一标识符。 |
nEventSeqNum | 必需 | Long | 事件相对于应用程序的调用实例中事件的发生顺序的序号位置。 |
pSubjectObj | 必需 | Object | 事件主题,即发生相应事件的对象。 有关示例,请参阅“说明”。 |
vMoreInfo | 必需 | Variant | 有关事件主题的附加信息。 有关详细信息,请参阅“说明”。 |
返回值
Variant
备注
若要处理事件通知,请创建实现 IVisEventProc 接口的类模块,然后创建此类的实例,以作为参数传递给 EventList 集合的 AddAdvise 方法。 请使用 AddAdvise 方法来创建发送通知的 Event 对象。
nEventCode 参数标识发生的一个或多个特定事件。 AddAdvise 方法的 EventCode 参数作为 nEventCode 传递给 VisEventProc。 在您的过程中,可以使用任何希望使用的分支技术来确定发生了哪个事件并对其进行处理。 本主题附带的示例使用了 Select Case 决策结构。
与 EventList 集合的 Index 属性不同,nEventID 不会随着向集合添加或从中删除 Event 对象而发生更改。
在 VisEventProc 中,可以使用以下代码获取发送通知的 Event 对象。
pSourceObj. EventList.ItemFromID(nEventID )
源对象 pSourceObj 和 Event 对象之间的连接会一直存在到出现以下情况之一为止:
程序删除了 Event 对象。
程序释放对源对象的最后一次引用。 (EventList 集合和 Event 对象保存对其源对象的引用。)
Microsoft Visio 应用程序实例终止。
Visio 实例中发生的第一个事件的 nEventSeqNum = 1,第二个事件为 2,依此类推。 在某些情况下,可以将序列号和 EventInfo 属性一起使用来获取有关事件的详细信息。
ShapeAdded 事件的 pSubjectObj 参数是代表刚添加的形状的 Shape 对象,而 BeforeSelectionDelete 事件的主题是 Selection 对象,其中选择要删除的形状。
对于很多事件而言,vMoreInfo 是一个与应用程序传递给其执行的加载项的命令行类似的字符串。 如果通知中不包括附加信息,则此参数将被设置为 Nothing。 有关特定事件的通知参数的详细信息,请参阅此参考中的特定事件主题。
从 Visio 2000 开始, VisEventProc 定义为返回值的函数。 但是,Visio 仅查看对传递查询事件代码的 VisEventProc 调用的返回值。 通过 IDispatch 提供 VisEventProc 的接收器对象无需更改。 若要修改现有事件处理程序以便它们能够处理查询事件,请将 Sub 过程更改为 Function 过程并返回相应的值。 (有关查询事件的详细信息,请参阅此参考,了解以 Query.) 前缀的事件主题
如果 nEventCode 标识了查询事件 (以查询) 前缀的事件,则从 VisEventProc 返回 True 以取消该事件,并返回 False 以允许该事件发生。 对于其他事件,此值可为任意值。 如果不返回显式值,Microsoft Visual Basic for Applications (VBA) 将返回一个空 Variant,Visio 将其解释为 False。
示例
此示例演示了如何创建一个实现 IVisEventProc 的类模块,以处理 Visio 中的源对象(如 Document 对象)触发的事件。 该模块包含 VisEventProc 函数,它使用 Select Case 块查找三个事件:DocumentSaved、PageAdded 和 ShapesDeleted。 其他事件属于默认情况 (Case Else)。 每个 Case 块构造一个字符串 (strMessage),其中包含被触发事件的名称和事件代码。 最后,该函数在“立即”窗口中显示这一字符串。
将这段示例代码复制到 VBA 或 Visual Basic 中新的类模块中,并将该模块命名为 clsEventSink。 之后,您就能使用事件接收模块创建 clsEventSink 类的实例,以及向类实例发送事件触发通知的 Event 对象。 若要了解如何创建事件接收模块,请参阅 AddAdvise 方法的示例。
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
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。