IVisEventProc.VisEventProc 方法 (Visio)
IVisEventProc的私人成員函式,會處理EventList.AddAdvise方法傳遞給它的事件通知。
語法
運算式。VisEventProc (nEventCode、 pSourceObj、 nEventID、 nEventSeqNum、 pSubjectObj、 vMoreInfo)
表達 代表 IVisEventProc 物件的 變數。
參數
名稱 | 必要/選用 | 資料類型 | 描述 |
---|---|---|---|
nEventCode | 必要 | 整數 | 發生的事件。 |
pSourceObj | 必要 | Object | EventList集合包含傳送通知之 Event物件的物件。 |
nEventID | 必要 | Long | EventList集合內Event物件的唯一識別碼。 |
nEventSeqNum | 必要 | Long | 在呼叫應用程式執行個體已發生的事件順序中,事件所佔的序數位置。 |
pSubjectObj | 必要 | Object | 事件的主旨,這是發生事件的物件。 See Remarks for examples. |
vMoreInfo | 必要 | Variant | 事件主體的詳細資訊。 如需詳細資訊,請參閱<備註>。 |
傳回值
Variant
註解
若要處理事件通知,請建立實作IVisEventProc介面的類別模組,然後建立此類別的實例,以引數方式傳遞至EventList集合的AddAdvise方法。 使用 AddAdvise 方法可建立傳送通知的 Event 物件。
nEventCode參數會識別發生的特定事件。 AddAdvise方法的EventCode引數會以nEventCode 形式傳遞至 VisEventProc。 在您的程式中,您可以使用任何您想要判斷發生哪一個事件的分支技術,並加以處理。 本主題隨附的範例會使用選取 案例 決策結構。
不同于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識別查詢事件 (前置詞為Query) 的事件,請從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 支援與意見反應。