Visio 物件事件完整分類
Cell 物件事件
CellChanged:儲存格值變更
FormulaChanged:公式變更
Selection 物件事件
BeforeSelectionDelete:選取刪除前
QueryCancelSelectionDelete:刪除確認提示
SelectionAdded:選取新增
SelectionChanged:選取變更
SelectionDeleteCanceled:刪除取消
Connects 物件事件
ConnectionsAdded:連線新增
ConnectionsDeleted:連線刪除
Style 物件事件
StyleAdded、StyleChanged、BeforeStyleDelete、StyleDeleteCanceled、QueryCancelStyleDelete
Keyboard / Mouse 事件
KeyDown/KeyPress/KeyUp
MouseDown/MouseMove/MouseUp
事件處理標準模式:IVisEventProc
// 1. 實作介面
public class EventSink : IVisEventProc
{
public object VisEventProc(short eventCode, object source,
object eventInfo, object extraInfo)
{
// 依 eventCode 分派至具體處理函式
switch (eventCode)
{
case (short)VisEventCodes.visEvtShapeAdded:
OnShapeAdded(source as Visio.Shape);
break;
// ... 其他事件 ...
}
return null;
}
private void OnShapeAdded(Visio.Shape shape) { /* ... */ }
}
// 2. 建立事件諮詢
EventSink sink = new EventSink();
documentEvents.AddAdvise(
(short)VisEventCodes.visEvtShapeAdded,
sink, 0, "ShapeAdd");
// 3. 解除諮詢 (釋放資源)
documentEvents.DeleteAdvise(adviseID);
AddAdvise 關鍵參數
- EventCode:
VisEventCodes 列舉值
- IVisEventProc:事件接收器實例
- Context:使用者定義內容 (傳回
extraInfo)
- Description:除錯用說明文字
常用事件代碼組合技巧
// 監聽形狀新增/刪除/變更
(short)VisEventCodes.visEvtAdd + (short)VisEventCodes.visEvtShape
(short)VisEventCodes.visEvtDelete + (short)VisEventCodes.visEvtShape
(short)VisEventCodes.visEvtChange + (short)VisEventCodes.visEvtShape