visio二次开发——事件编程
首先,创建一个Visio事件侦听类
“`
///
/// Visio事件侦听类
///
[ComVisible(true)]
public sealed class EventSink : IVisEventProc
{
private Application eventApplication; //Visio应用程序对象
private Document eventDocument; //Visio文档对象
private int alertResponse;public event VisioEventHandler OnShapeAdd; //形状添加事件 public event VisioEventHandler OnShapeClick; //形状点击事件 public event VisioEventHandler OnShapeDelete; //形状删除事件 public event VisioEventHandler OnMarkerEvent; //右键菜单事件阀门开关 public event VisioEventHandler OnCellChanged; //属性值修改事件 public event VisioEventHandler OnTextEdit; //文本编辑事件 public event QueryCancelEventHandler OnQueryCancelSelectionDelete; //选区选择删除事件 /// <summary> /// 默认构造函数 /// </summary> public EventSink() { } /// <summary> /// 对文档的相关处理事件进行侦听处理 /// </summary> /// <param name="callingApplication">应用对象</param> /// <param name="callingDocument">文档对象</param> [CLSCompliant(false)] public void AddAdvise(Application callingApplication, Document callingDocument) { // ArgumentValidation.CheckForNullReference(callingApplication, "callingApplication"); //ArgumentValidation.CheckForNullReference(callingDocument, "callingDocument"); // 保存应用程序对象,方便设置事件处理 eventApplication = callingApplication; // 缓存AlertResponse 对象的值 alertResponse = callingApplication.AlertResponse; // 保存文档对象,方便设置事件处理 eventDocument = callingDocument; // 增加感兴趣的事件侦听处理 setAddAdvise(); return; } /// <summary> /// 当事件被增加到事件列表后,且该事件被触发处理,那么IVisEventProc.VisEventProc 函数会被Visio进行调用 /// 事件增加通过SetAddAdvise函数进行处理。 /// </summary> /// <param name="eventCode">触发的事件代码</param> /// <param name="source">触发事件的源对象,该对象可能是一个Visio应用程序对象(application),也可以是文档对象(document)。</param> /// <param name="eventId">触发的事件唯一性标识</param> /// <param name="eventSequenceNumber">触发事件的相对顺序</param> /// <param name="subject">发生该事件的对象应用,如对形状删除和增加的事件来说,对象就是形状本身。</param> /// <param name="moreInfo">关于该事件的附加信息</param> /// <returns>返回值会被忽略,除非事件是一个查询事件。如没有任何的查询事件,返回值对象是一个空值。</returns> object IVisEventProc.VisEventProc(short eventCode, object source, int eventId, int eventSequenceNumber, object subject, object moreInfo) { Application eventProcApplication = null; Document eventProcDocument = null; Shape eventShape = null;