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进行学习,自己编写一些例子对事件进行处理

转载于:https://www.cnblogs.com/wuhuacong/archive/2008/02/22/1078303.html

C#进行Visio开发的事件处理相关推荐

  1. 微信小程序开发3——事件处理

    事件处理 index.wxml <!--index.wxml--> <view bindtap="viewTapHandle"><button bin ...

  2. C#进行Visio二次开发之知识点考核试题

    本人做过多年的Visio二次开发,根据个人的经验总结及项目积累,写了一些小小的随笔文章(具体可参考<伍华聪的Visio二次开发文章>,上月有幸给深圳一个团队做了两天的Visio培训,当了一 ...

  3. 基于Visio的二次开发

    基于Visio的二次开发 前一段时间,由于项目的需要:学习了一些关于Visio二次开发的知识:现在工具基本成形了,也算告一段落了:因此想总结一下关于Visio的二次开发的一些基本知识: 对于基于Vis ...

  4. SharePoint Designer 2013 和 Visio 2013 中的工作流开发

    了解如何使用 Visio 2013 和 SharePoint Designer 2013 来创建工作流并将其发布到 SharePoint 2013 网站而无需任何代码. 上次修改时间: 2015年3月 ...

  5. SharePoint 2010: 使用Visio Services展示SCOM数据

    isio 2010 已经发布,相比过去的版本,Visio 2010以及Visio Services能够帮助我们创建更为强大的解决方案.有一个很好的例子是Visio 2010 Add-in for Sy ...

  6. visio wps 流程图_科研必备:几款好用的流程图工具,助力你的论文/科研绘图

    写SCI论文常常会遇到一个问题--如何才能让读者通俗易懂地理解自己的研究?如果不能让读者了解研究过程,读者会对研究结果是否合理.如何应用存在疑问:尤其是期刊编辑和审稿人如果不能通过咱们的叙述,清楚地了 ...

  7. visio科学图形包_科学网—科研必备:几款好用的流程图工具,助力你的论文/科研绘图...

    写SCI论文常常会遇到一个问题--如何才能让读者通俗易懂地理解自己的研究?如果不能让读者了解研究过程,读者会对研究结果是否合理.如何应用存在疑问:尤其是期刊编辑和审稿人如果不能通过咱们的叙述,清楚地了 ...

  8. visio 模具_Visio2013 自定义模具 简单公式

    目前工作需要利用visio绘制配网单线图,并考虑开发高级功能.在此,记录一下学习历程和主要知识点.文章排版意在积累知识点,排版不好,凑合着看吧!全部知识点都是自己参考微软Visio 2013sdk和自 ...

  9. .net控件开发系列

    此系列我将尽我所能写下去吧,跟大家分享学习控件开发.也希望大家对我多提意见,让我们共同进步                              net控件开发系列 1.net组件开发系列(-)之 ...

最新文章

  1. Linux 交换空间管理和技巧
  2. mysql什么级别数据库_Mysql的四种隔离级别是什么
  3. 流量时代已亡,如何在 ROI 的魔咒下生存?
  4. 并行和并发有什么区别?
  5. Soul 网关源码阅读(六)Sofa请求处理概览
  6. c语言枪图形,6个变态的C语言Hello World程序[转载]
  7. pydicom 显示jpeg压缩图像_图像原理 jpg png tga bmp 存储格式
  8. 物联网定位技术超全解析
  9. spss因子分析结果解读_SPSS进行问卷量表信度检验(详细操作过程及结果分析)——【杏花开生物医药统计】...
  10. 利用mysql客户端查询UCSC数据库
  11. 李宏毅2022机器学习hw5
  12. 有测试狗狗好坏的软件吗,6个测试判断狗狗性格,胆小或凶猛一测便知,你家狗狗是哪种?...
  13. [转载]唐僧的亲爹究竟是谁 (2016-02-17 16:37:21)
  14. 如何安装Chrome扩展程序或插件
  15. 3DMax指定面贴图
  16. 卷积神经网络及其在图像处理中的应用
  17. Javascript读书笔记(六)函数作用域,声明提前,作用域链,闭包
  18. MLOps极致细节:15. Azure ML数据集的上传(Azure Workspace DataStore Upload)与注册(Azure Dataset Register)
  19. parrallel for matlab,[转载]MATLAB并行计算工具箱 -- Paralleln
  20. 基于MATLAB和python输出曼德勃罗集

热门文章

  1. Topic model相关文章总结
  2. 网络爬虫之httpclient的使用
  3. C++/C--unordered_map常见用法详解
  4. 514 - Rails
  5. ZZULIOJ21级新生周赛(1)——命题人:朱会东老师——2822: 探姬粉丝众多
  6. php jumppage加载网址,php 分页类 扩展代码
  7. java web购物车_java web开发——购物车功能实现
  8. Android备份onedrive,三星Note10正将OneDrive集成到Android相册应用中
  9. 软件无法连接oracle数据库,全面解析Oracle无法连接本地数据库问题
  10. python @修饰符_Python修饰符,返回替换了一个或多个参数的函数