【C#】C#举行Visio二次开发之配备境况跟踪

吃透,很多境况下是老大需要的,例如,要是我们健全了一套系统,可以将新疆赈灾的款项的筹集、采购、分发等步骤都能看清,相信任何世界会安静很多。
同等,对于一个选拔Visio进行二次开发的次序来说,背后你须求精通用户伸张了那么些设备,删除了这一个设备,修改了那一个设备,这样您才能对任何系统的数据进行实用的支配,否则“赈灾”款项就可能有失了,呵呵。
那大家应该怎么样做才能使得的拍卖那些事件,达到对装备的改观明察秋毫呢?
自己眼前介绍了一篇小说《C#进展Visio开发的事件处理
》,其中也介绍了各个风云侦听,大家要对设施开展跟踪的话,基本上只须求侦听那多少个事件,并对之举办拍卖即可。

C# 1            const string sink = “”;
C# 2            Event newEvent = null;
C# 3
C# 4            EventList applicationEvents = eventApplication.EventList;
C# 5            EventList documentEvents = eventDocument.EventList;
C# 6
C# 7            newEvent = documentEvents.AddAdvise(
C# 8                (unchecked((short)VisEventCodes.visEvtAdd) + (short)VisEventCodes.visEvtShape),
C# 9                (IVisEventProc)this, sink, “ShapeAdd”);
C# 10
C# 11            newEvent = documentEvents.AddAdvise(
C# 12                (short)VisEventCodes.visEvtDel + (short)VisEventCodes.visEvtShape,
C# 13                (IVisEventProc)this, sink, “ShapeDelete”);
C# 14
C# 15              newEvent = documentEvents.AddAdvise(
C# 16                (short)VisEventCodes.visEvtMod + (short)VisEventCodes.visEvtCell,
C# 17                (IVisEventProc)this, sink, “CellChanged”);
C# 18

C# 19        object IVisEventProc.VisEventProc(short eventCode, object source, int eventId,
C# 20            int eventSequenceNumber, object subject, object moreInfo)
C# 21C# 22        C# 23{
C# 24        C# 25C# 26C# 27C# 28C# 29.
C# 30            switch (eventCode)
C# 31C# 32            C# 33{
C# 34                case (short)VisEventCodes.visEvtShape + unchecked((short)VisEventCodes.visEvtAdd):
C# 35                    eventShape = (Shape)subject;
C# 36                    handleShapeAdd(eventShape);
C# 37                    break;
C# 38
C# 39                case (short)VisEventCodes.visEvtDel + (short)VisEventCodes.visEvtShape:
C# 40                    eventShape = (Shape)subject;
C# 41                    handleShapeDelete(eventShape);
C# 42                    break;
C# 43
C# 44                case (short)VisEventCodes.visEvtCell + (short)VisEventCodes.visEvtMod:
C# 45                    Visio.Cell cell = (Cell)subject;
C# 46                    if (cell.Name.IndexOf(“Prop”) >= 0)//限制只举行自定义事件三次
C# 47C# 48                    C# 49{
C# 50                        eventShape = cell.Shape;
C# 51                        handleCellModify(eventShape);
C# 52                    }
C# 53                    break;
C# 54
C# 55                default:
C# 56                    break;
C# 57            }
C# 58
C# 59            return result;
C# 60        }

如上是对多少个专门事件的侦听,大家要落到实处设备的跟踪,必要在这多少个事件中处理有关的设备音信。为了跟踪好装备的相关音讯,大家须求定义一个实体类ShapeLogInfo类放置相关的配备音讯,如Shape的GUID,Shape的ID,设备状态(添加、修改、删除),Shape的Name,还有就是大家自定义的一个质量“设备档次”。

C# 61C# 62        /**//// <summary>
C# 63        /// 形状的体系,即设备档次
C# 64        /// </summary>
C# 65        public string ShapeType
C# 66
C# 67C# 68        /**//// <summary>
C# 69        /// 形状ID
C# 70        /// </summary>
C# 71        public string ShapeID
C# 72
C# 73C# 74        /**//// <summary>
C# 75        /// 形状的GUID
C# 76        /// </summary>
C# 77        public string ShapeGuid
C# 78
C# 79C# 80        /**//// <summary>
C# 81        /// 形状的事态:新增、编辑、删除
C# 82        /// </summary>
C# 83        public ShapeStatus ShapeStatus
C# 84
C# 85C# 86        /**//// <summary>
C# 87        /// 形状名称
C# 88        /// </summary>
C# 89        public string ShapeName

为了更好的管住ShapeLogInfo的相干新闻,大家把相同设备档次(ShapeType)的内置一起管制,于是,我们再创造一个ShapeTypeLogInfo类来装载相关的日志音信,具体如下:

C# 90C# 91        /**//// <summary>
C# 92        /// 形状类型
C# 93        /// </summary>
C# 94    public string ShapeType
C# 95
C# 96C# 97        /**//// <summary>
C# 98        /// 形状类型对应的数额库表名称
C# 99        /// </summary>
C# 100        public string ShapeTableName
C# 101
C# 102C# 103        /**//// <summary>
C# 104        /// 该造型类型对应的造型日志对象集合
C# 105        /// </summary>
C# 106        public Dictionary<string, ShapeLogInfo> ShapeColloction

为了判定是不是有对应的ShapeTypeLogInfo和ShapeLogInfo,须求定义多少个函数用来维护相关的汇集音信,如下所示:

C# 107C# 108        /**//// <summary>
C# 109        /// 获取形状对应的花色,假诺没有则成立
C# 110        /// </summary>
C# 111        private ShapeTypeLogInfo GetShapeType(ShapeLogInfo shape)
C# 112
C# 113C# 114        /**//// <summary>
C# 115        /// 如若集合中有,修改情状;否则添加一个新的
C# 116        /// </summary>
C# 117        public void AddLog(ShapeLogInfo shapeLogInfo)
C# 118
C# 119C# 120        /**//// <summary>
C# 121        /// 判断指定的造型是还是不是是在汇聚中留存
C# 122        /// </summary>
C# 123        public bool IsNewShape(ShapeLogInfo shape)
C# 124
C# 125
C# 126C# 127        /**//// <summary>
C# 128        /// 取当前设施在聚集中蕴藏的ShapeLog对象
C# 129        /// </summary>
C# 130        public ShapeLogInfo GetShape(string shapeType, string shapeId)

形成这么些函数后,最后索要做的就是在加上、删除、修改Shape的侦听事件中参与相关的日记就足以了,如在剔除设备的时候,大家是如此记录相关新闻的

C# 131private void visioEventSink_OnShapeDelete(object sender, EventArgs e)
C# 132C# 133C# 134{
C# 135            Shape shape = (Shape)sender;
C# 136            string strDeviceType = string.Empty;
C# 137            string strDeviceName = string.Empty;
C# 138            string strDeviceID = string.Empty;
C# 139
C# 140            strDeviceType = VisioUtility.GetShapeCellValue(shape, “设备项目”);
C# 141            strDeviceID = VisioUtility.GetShapeCellValue(shape, “GUID”);
C# 142
C# 143
C# 144            ShapeLogInfo logInfo = new ShapeLogInfo();
C# 145            logInfo.ShapeType = strDeviceType;
C# 146            logInfo.ShapeID = shape.NameID;
C# 147            logInfo.ShapeName = VisioUtility.GetShapeCellValue(shape, “名称”);
C# 148
C# 149            if (shape.Application.IsUndoingOrRedoing)
C# 150C# 151            C# 152{
C# 153                ShapeLogInfo info = Portal.gc.gOperationLog.GetShape(strDeviceType, shape.NameID);
C# 154                if (info != null)
C# 155C# 156                C# 157{
C# 158                    strDeviceID = info.ShapeGuid;
C# 159                }
C# 160            }
C# 161
C# 162            logInfo.ShapeGuid = strDeviceID;
C# 163            logInfo.ShapeStatus = ShapeStatus.DeleteShape;
C# 164            Portal.gc.gOperationLog.AddLog(logInfo);
C# 165}

其中if
(shape.Application.IsUndoingOrRedoing)是为了认清该操作是还是不是为Undo或者Redo导致的操作,假诺是,我们得到它前边Shape的GUID即可。

笔录了设备的那几个修改音讯,大家就足以在保留数据的时候,依据这一个信息移除相关的关系,添加或者去除相关的设备音讯了,而且这个新闻,对于大家记录用户的图形修订记录也是必必要做的事体。

 

相关文章