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

你可能感兴趣的:(visio)