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

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

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

None.gif            newEvent = documentEvents.AddAdvise(
None.gif                ( short)VisEventCodes.visEvtDel + ( short)VisEventCodes.visEvtShape,
None.gif                (IVisEventProc) this, sink,  " ShapeDelete ");

None.gif              newEvent = documentEvents.AddAdvise(
None.gif                ( short)VisEventCodes.visEvtMod + ( short)VisEventCodes.visEvtCell,
None.gif                (IVisEventProc) this, sink,  " CellChanged ");

None.gif             newEvent = documentEvents.AddAdvise(
None.gif                ( short)VisEventCodes.visEvtCodeShapeExitTextEdit,
None.gif                (IVisEventProc) this, sink,  " ShapeExitedTextEdit ");

None.gif             newEvent = documentEvents.AddAdvise(
None.gif                ( short)VisEventCodes.visEvtCodeQueryCancelSelDel,
None.gif                (IVisEventProc) this, sink,  " QueryCancelSelectionDelete ");

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

本文转自博客园伍华聪的博客,原文链接:C#进行Visio开发的事件处理,如需转载请自行联系原博主。



目录
相关文章
|
9天前
|
C#
C#一分钟浅谈:委托与事件的实现方式
本文详细介绍了C#编程中委托与事件的基础知识及应用场景。首先解释了委托的概念,包括定义与使用方法;接着介绍了事件这一基于委托的特殊类型,展示了如何在类中定义事件及跨类订阅与处理事件;最后讨论了常见问题如事件未处理异常、重复订阅及内存泄漏等,并提出了相应的解决方案。通过本文,读者将全面掌握委托与事件的使用技巧,提升应用程序的设计与开发水平。
27 7
|
22天前
|
JSON C# 开发者
💡探索C#语言进化论:揭秘.NET开发效率飙升的秘密武器💼
【8月更文挑战第28天】C#语言凭借其强大的功能与易用性深受开发者喜爱。伴随.NET平台演进,C#持续引入新特性,如C# 7.0的模式匹配,让处理复杂数据结构更直观简洁;C# 8.0的异步流则使异步编程更灵活高效,无需一次性加载全部数据至内存。通过示例展示了模式匹配简化JSON解析及异步流实现文件逐行读取的应用。此外,C# 8.0还提供了默认接口成员和可空引用类型等特性,进一步提高.NET开发效率与代码可维护性。随着C#的发展,未来的.NET开发将更加高效便捷。
37 1
|
1月前
|
C#
由浅入深理解C#中的事件
由浅入深理解C#中的事件
97 19
|
18天前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
31 0
|
18天前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
41 0
|
18天前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
24 0
|
18天前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
43 0
|
2月前
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
30天前
|
存储 算法 安全
C#语言进阶(二)—事件全解
C#语言进阶(二)—事件全解
27 0
|
2月前
|
监控 测试技术 C#
推荐一个使用 C# 开发的轻量级压测工具
推荐一个使用 C# 开发的轻量级压测工具