Share via


IVisEventProc.VisEventProc 方法 (Visio)

IVisEventProc的私人成員函式,會處理EventList.AddAdvise方法傳遞給它的事件通知。

語法

運算式VisEventProc (nEventCodepSourceObjnEventIDnEventSeqNumpSubjectObjvMoreInfo)

表達 代表 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 )

來源物件 pSourceObjEvent 物件之間的連接存在,直到發生下列其中一項為止:

  • 程式會刪除 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 區塊來檢查下列三個事件:DocumentSavedPageAddedShapesDeleted。 其他事件則歸為預設情況 (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 支援與意見反應