Visio 物件模型提供豐富的事件機制,掌握各物件支援的事件是開發互動式增益集的基礎。本文整理九大核心物件的完整事件清單,並示範 IVisEventProc 介面實作與 AddAdvise 訂閱範式。
AppActivated、BeforeQuit、BeforeModal/AfterModal、NoEventsPending、QueryCancelQuit、EnterScope/ExitScope、MarkerEvent(右鍵選單)...WindowOpened/Changed、BeforeWindowClosed/WindowCloseCanceled、BeforeWindowSelDelete、BeforeWindowPageTurn/WindowTurnedToPage、WindowActivated...DocumentAdded/Created/Opened、DocumentChanged/Saved、BeforeDocumentClose...PageAdded/Changed、BeforePageDelete/PageDeleteCanceled...ShapeAdded/Changed、BeforeShapeDelete/ShapesDeleted、BeforeShapeTextEdit/ShapeExitedTextEdit、ShapeLinkAdded/Deleted、ShapeParentChanged...MasterAdded/Changed、BeforeMasterDelete/MasterDeleteCanceled、QueryCancelMasterDelete...CellChanged、FormulaChanged...SelectionAdded/Changed、BeforeSelectionDelete/SelectionDeleteCanceled、QueryCancelSelectionDelete...ConnectionsAdded/Deleted、StyleAdded/Changed/Deleted、KeyDown/Press/Up、MouseDown/Move/Up...public class EventSink : IVisEventProc {
public object VisEventProc(short eventCode, object source, int eventID,
int eventSeqNum, object subject, object moreInfo) {
// 處理邏輯
return null;
}
}
EventList docEvents = document.EventList;
docEvents.AddAdvise(
(short)VisEventCodes.visEvtAdd + (short)VisEventCodes.visEvtShape,
this, "", "ShapeAdd");
docEvents.AddAdvise(
(short)VisEventCodes.visEvtDel + (short)VisEventCodes.visEvtShape,
this, "", "ShapeDelete");
docEvents.AddAdvise(
(short)VisEventCodes.visEvtMod + (short)VisEventCodes.visEvtCell,
this, "", "CellChanged");
Visio 事件碼為 動作碼 + 物件碼:
visEvtAdd(1)、visEvtDel(2)、visEvtMod(4)、visEvtCell(8)、visEvtShape(16)...visEvtAdd + visEvtShape = 形狀新增;visEvtMod + visEvtCell = 儲存格變更。建議將此表列印備查,開發時快速定位所需事件。