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

posted on   伍华聪  阅读(6142)  评论(6编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)

导航

< 2008年2月 >
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示