C#进行Visio开发的事件处理
Visio的二次开发过程中,必定要处理很多Visio事件,事件基本上分为三类:Document事件、Applicaiton事件、AxDrawingControl事件。Document事件是每个文档创建或者打开都需要重新绑定一次的,但是Application事件不变,即不需要重新绑定,AxDrawingControl是ActiveX控件的事件响应。
在C#进行Visio的开发中,通过继承接口IVisEventProc,可以创建事件的侦听处理类,如下所示:
[ComVisible(true)]
public sealed class EventSink2 : IVisEventProc
{




..

object IVisEventProc.VisEventProc(short eventCode, object source, int eventId,
int eventSequenceNumber, object subject, object moreInfo)
{

}
}
事件有很多类,有Application级别的,有Document级别的,有Page级别的,有Shape级别的,有Windows级别的,有Cell级别的..............,下面截取一部分事件代码看看
// Document event codes
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtDoc + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtDel:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtCodeBefDocSave:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtCodeBefDocSaveAs:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtCodeDocDesign:
// Page event codes
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtPage + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtDel:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtPage + visEvtAdd:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtPage + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtMod:
// Master event codes
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtMaster + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtDel:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtMaster + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtMod:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtCodeCancelMasterDel:
// Shape event codes
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtShape + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtDel:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtCodeShapeBeforeTextEdit:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtShape + visEvtAdd:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtShape + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtMod:
// Cell event codes
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtCell + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtMod:
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtFormula + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtMod:还有很多很多..
将事件和我们的处理函数联系起来,还需要对事件进行侦听,即AddAdvise,下面列出一段如何侦听事件的代码供参考
const string sink = "";
Event newEvent = null;

EventList applicationEvents = eventApplication.EventList;
EventList documentEvents = eventDocument.EventList;

newEvent = documentEvents.AddAdvise(
(unchecked((short)VisEventCodes.visEvtAdd) + (short)VisEventCodes.visEvtShape),
(IVisEventProc)this, sink, "ShapeAdd");
newEvent = documentEvents.AddAdvise(
(short)VisEventCodes.visEvtDel + (short)VisEventCodes.visEvtShape,
(IVisEventProc)this, sink, "ShapeDelete");
newEvent = documentEvents.AddAdvise(
(short)VisEventCodes.visEvtMod + (short)VisEventCodes.visEvtCell,
(IVisEventProc)this, sink, "CellChanged");
newEvent = documentEvents.AddAdvise(
(short)VisEventCodes.visEvtCodeShapeExitTextEdit,
(IVisEventProc)this, sink, "ShapeExitedTextEdit");
newEvent = documentEvents.AddAdvise(
(short)VisEventCodes.visEvtCodeQueryCancelSelDel,
(IVisEventProc)this, sink, "QueryCancelSelectionDelete");
具体的使用,最好下载Visio2007 SDK进行学习,自己编写一些例子对事件进行处理
在C#进行Visio的开发中,通过继承接口IVisEventProc,可以创建事件的侦听处理类,如下所示:
















事件有很多类,有Application级别的,有Document级别的,有Page级别的,有Shape级别的,有Windows级别的,有Cell级别的..............,下面截取一部分事件代码看看
















































将事件和我们的处理函数联系起来,还需要对事件进行侦听,即AddAdvise,下面列出一段如何侦听事件的代码供参考





















具体的使用,最好下载Visio2007 SDK进行学习,自己编写一些例子对事件进行处理

转载请注明出处:撰写人:伍华聪 http://www.iqidi.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)