C#进行Visio开发的事件处理

Visio的二次开发过程中,必定要处理很多Visio事件,事件基本上分为三类:Document事件、Applicaiton事件、AxDrawingControl事件。Document事件是每个文档创建或者打开都需要重新绑定一次的,但是Application事件不变,即不需要重新绑定,AxDrawingControl是ActiveX控件的事件响应。
在C#进行Visio的开发中,通过继承接口IVisEventProc,可以创建事件的侦听处理类,如下所示:
C#进行Visio开发的事件处理_Visio二次开发    [ComVisible(true)]
C#进行Visio开发的事件处理_Visio二次开发    public sealed class EventSink2 : IVisEventProc
C#进行Visio开发的事件处理_编程_03    {
C#进行Visio开发的事件处理_Visio二次开发_04
C#进行Visio开发的事件处理_Visio二次开发_04C#进行Visio开发的事件处理_Visio二次开发_06C#进行Visio开发的事件处理_Visio二次开发_06C#进行Visio开发的事件处理_Visio二次开发_06..
C#进行Visio开发的事件处理_Visio二次开发_04
C#进行Visio开发的事件处理_Visio二次开发_04        object IVisEventProc.VisEventProc(short eventCode, object source, int eventId,
C#进行Visio开发的事件处理_Visio二次开发_04            int eventSequenceNumber, object subject, object moreInfo)
C#进行Visio开发的事件处理_编程_12        {
C#进行Visio开发的事件处理_Visio二次开发_04           C#进行Visio开发的事件处理_Visio二次开发_06
C#进行Visio开发的事件处理_编程_15        }
C#进行Visio开发的事件处理_编程_16     }

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

C#进行Visio开发的事件处理_Visio二次开发                    // Document event codes
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtDoc + (short)Microsoft.Office.Interop.Visio.
C#进行Visio开发的事件处理_Visio二次开发                        VisEventCodes.visEvtDel:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtCodeBefDocSave:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtCodeBefDocSaveAs:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtCodeDocDesign:
C#进行Visio开发的事件处理_Visio二次开发
C#进行Visio开发的事件处理_Visio二次开发                    // Page event codes
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtPage + (short)Microsoft.Office.Interop.Visio.
C#进行Visio开发的事件处理_Visio二次开发                        VisEventCodes.visEvtDel:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtPage + visEvtAdd:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtPage + (short)Microsoft.Office.Interop.Visio.
C#进行Visio开发的事件处理_Visio二次开发                        VisEventCodes.visEvtMod:
C#进行Visio开发的事件处理_Visio二次开发
C#进行Visio开发的事件处理_Visio二次开发                    // Master event codes
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtMaster + (short)Microsoft.Office.Interop.Visio.
C#进行Visio开发的事件处理_Visio二次开发                        VisEventCodes.visEvtDel:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtMaster + (short)Microsoft.Office.Interop.Visio.
C#进行Visio开发的事件处理_Visio二次开发                        VisEventCodes.visEvtMod:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtCodeCancelMasterDel:
C#进行Visio开发的事件处理_Visio二次开发                   // Shape event codes
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtShape + (short)Microsoft.Office.Interop.Visio.
C#进行Visio开发的事件处理_Visio二次开发                        VisEventCodes.visEvtDel:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtCodeShapeBeforeTextEdit:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtShape + visEvtAdd:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtShape + (short)Microsoft.Office.Interop.Visio.
C#进行Visio开发的事件处理_Visio二次开发                        VisEventCodes.visEvtMod:
C#进行Visio开发的事件处理_Visio二次开发                    // Cell event codes
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtCell + (short)Microsoft.Office.Interop.Visio.
C#进行Visio开发的事件处理_Visio二次开发                        VisEventCodes.visEvtMod:
C#进行Visio开发的事件处理_Visio二次开发                    case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
C#进行Visio开发的事件处理_Visio二次开发                        visEvtFormula + (short)Microsoft.Office.Interop.Visio.
C#进行Visio开发的事件处理_Visio二次开发                        VisEventCodes.visEvtMod:
还有很多很多..

将事件和我们的处理函数联系起来,还需要对事件进行侦听,即AddAdvise,下面列出一段如何侦听事件的代码供参考
C#进行Visio开发的事件处理_Visio二次开发            const string sink = "";
C#进行Visio开发的事件处理_Visio二次开发            Event newEvent = null;
C#进行Visio开发的事件处理_Visio二次开发
C#进行Visio开发的事件处理_Visio二次开发            EventList applicationEvents = eventApplication.EventList;
C#进行Visio开发的事件处理_Visio二次开发            EventList documentEvents = eventDocument.EventList;
C#进行Visio开发的事件处理_Visio二次开发
C#进行Visio开发的事件处理_Visio二次开发            newEvent = documentEvents.AddAdvise(
C#进行Visio开发的事件处理_Visio二次开发                (unchecked((short)VisEventCodes.visEvtAdd) + (short)VisEventCodes.visEvtShape),
C#进行Visio开发的事件处理_Visio二次开发                (IVisEventProc)this, sink, "ShapeAdd");

C#进行Visio开发的事件处理_Visio二次开发            newEvent = documentEvents.AddAdvise(
C#进行Visio开发的事件处理_Visio二次开发                (short)VisEventCodes.visEvtDel + (short)VisEventCodes.visEvtShape,
C#进行Visio开发的事件处理_Visio二次开发                (IVisEventProc)this, sink, "ShapeDelete");

C#进行Visio开发的事件处理_Visio二次开发              newEvent = documentEvents.AddAdvise(
C#进行Visio开发的事件处理_Visio二次开发                (short)VisEventCodes.visEvtMod + (short)VisEventCodes.visEvtCell,
C#进行Visio开发的事件处理_Visio二次开发                (IVisEventProc)this, sink, "CellChanged");

C#进行Visio开发的事件处理_Visio二次开发             newEvent = documentEvents.AddAdvise(
C#进行Visio开发的事件处理_Visio二次开发                (short)VisEventCodes.visEvtCodeShapeExitTextEdit,
C#进行Visio开发的事件处理_Visio二次开发                (IVisEventProc)this, sink, "ShapeExitedTextEdit");

C#进行Visio开发的事件处理_Visio二次开发             newEvent = documentEvents.AddAdvise(
C#进行Visio开发的事件处理_Visio二次开发                (short)VisEventCodes.visEvtCodeQueryCancelSelDel,
C#进行Visio开发的事件处理_Visio二次开发                (IVisEventProc)this, sink, "QueryCancelSelectionDelete");

具体的使用,最好下载Visio2007 SDK进行学习,自己编写一些例子对事件进行处理
C#进行Visio开发的事件处理_Visio二次开发_86主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
专注于Winform开发框架/混合式开发框架、Web开发框架、Bootstrap开发框架、微信门户开发框架的研究及应用。
  转载请注明出处:
C#进行Visio开发的事件处理_Visio二次开发_86撰写人:伍华聪