问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用C#进行Visio二次开发

发布网友 发布时间:2022-05-01 22:06

我来回答

1个回答

热心网友 时间:2022-06-24 03:44

  1)Viso二次开发管理系统的架构设计思路
  
  为了,有效的模仿Office界面,我们使用了很多相似工具条图标,图标有一个透明的颜色,可以使得图标展示更加完美,不留底图背景的痕迹。
  当然,整个布局使用了很有名的WeifenLuo.WinFormsUI.DockContent, 来使得界面更加完美,另外,有一点值得提及的是,为了使得工具条可以移动,分段等操作,这里还使用了框架本身提供的ToolStripPannel面板。
  
  下面对系统的各个界面区域做一个总体的说明,首先我们看看下面的图形,我分了几个部分。
  
  其中红色部分是Visio控件本身的内容,左边的形状(也称模具)窗口,是通过调用打开形状文件而呈现出来的。我们做Visio的二次开发,多数是和这个控件打交道了。其他部分,设计好界面后(主要涉及布局界面的设计使用了),只需要调用相关的API接口就可以实现相关的功能了。
  
  Viso二次开发架构设计图
  整个系统的架构设计如下图所示,其中绿色部分为外部控件,其他部分为自己编写的代码,边界也划分的比较清晰,界面层只是和业务逻辑层交互,不会直接操作数据库或者Visio文件,这两个部分交给下面数据访问层(DAL) 和 Visio对象访问层(VOL)进行封装调用。数据访问层对数据库的访问,是通过微软的企业库Enterprise Library库进行调用的,这样可以保证更少的代码,更高的代码质量。其中实体层和通用层是各个模块的共用的内容。
  
  
  Visio的二次开发,除了需要操作Visio的文件(包含多个模具文件,Viso文档)还有就是也需要和数据库打交道。
  为了较好区分和协调他们的访问,我设定了一个访问边界:访问数据库的层不会访问Visio文件对象,访问Visio文件对象的不会去访问数据库,它们统一由业务层(Business)调配,各层之间分享Entity层的信息即可。
  数据库的底层访问通过利用Enterprise Library的模块完成,因此DAL层只需要做较少的工作即可完成对数据库的访问了。
  
  Visio的二次开发图纸审批流程
  
  图纸只有通过了编辑后,同时校对、和审核才能够发布,已发布的图方可供Web 端查看。
  保存图纸的时候,如果是制图员,将在图纸“制图”栏目中填写用户名,并擦除复核、校对、签发的用户名,图纸状态恢复“编辑”状态;如果是校对或者复核人员,将在“校对”或者“复核”中填写用户名,并擦除“签发”的用户名,图纸恢复“已校对”或者“发布中”的状态;如果是签发人员,系统询问“是否发布”,选择是图纸状态变为“已发布”,否则变为“发布中”,并擦除签发的用户名。
  整个发布的流程,是通过属性值进行判断,没有涉及太多的流程内容,因此对图纸的发布操作也相对比较简单。
  
  系统模具对象关系
  整个系统设计很多类型的模具对象,所有的设备都有一个字段用来表示其属于那种设备,设备基本上分下面为几类:一类是纯粹的符号,不涉及统计等信息,如河流、道路等;一类是线路设备,包括母线、电缆、架空线;一类是开关,包括负荷开关、刀闸、继保开关等;一类是变压器,包括公用变压器、专用变压器等。
  模具的设计比较讲究,由于Visio在图纸分析的时候,如果是组合的模具图标,会认为是两个模具图标,对于拓扑分析非常不利,因此所有的模具均是通过ShapeSheet中的Geometry形状进行绘制,这样就保证整个模具是一个整体,模具绘制是个非常精细复杂的工作,还需要考虑文本、开关闭合等事件的界面处理效果,这个如果需要了解和掌握,需要开几节课程才能讲的清楚。下图大致绘制出了系统中设备的层次关系图,注意仅是概念图,真实的系统中,设备直接没有继承关系。
  
  
  Visio二次开发的设备状态跟踪
  对于一个使用Visio进行二次开发的程序来说,背后你需要知道用户增加了那些设备,删除了那些设备,修改了那些设备(移动或者更改了文字、属性等操作),这样你才能对整个系统的数据进行有效的控制。如果需要知道这些,那么你对设备的状态跟踪就显得非常重要,特别是一个删除设备的操作,设计到需要删除相关的内容的时候,这项工作就特别的重要了。
  由于设备的状态更新频繁,为了系统的稳定及效率,整个系统是在图纸保存或者修改的时候,并不保存相关的设备信息;当图纸发布的时候,清空原来的数据库设备信息表,重新遍历图纸的设备信息,把它一次性写到数据库中,这样保证了发布图纸设备信息的权威性,同时提高了系统的性能。

  
  
  Visio对象状态跟踪的事件侦听
  在C#的Viso开发例子中,都建议采用事件侦听的方式进行处理相关的内容,这是一个很好的突破(相对VB中的开发例子而已),不过处理也有一些麻烦,主要是观念的转变以及细节的考虑吧。在这里,你可以侦听到任何你关注的事件,然后通过自定义的函数,实现自己的业务处理,这种方式实现起来确实比较简洁,思路非常清晰。
  
  
  Visio对象数据库对象及关系
  为了保持Visio的相关设备信息,你需要在数据库中建立相关的表,来存储设备属性信息以及图纸信息,方便信息的统计查询,图纸更可以通过Web进行查看等。
  其中的Device1是一个根据SystableField表自动生成出来的设备表,它的表名会自动在SysDeviceTable中注册,方便寻找对应设备类型是哪个表。SystableField是差不多是根据Visio对象里面的属性定义的一个拷贝,里面记录了字段名称、字段类型、是否可见、排序、格式、默认值等这些Visio属性定义里面有的(你打开ShapeSheet中就看到每个属性对应一行的定义信息,就是这里面的内容的存储了)。
  系统里面有一个VisioImage和VisioImageRelease的表,一个是存放增加或者修改的图纸内容(二进制存储),一个是存放发布后的图纸(二进制存储),我们系统打开图纸的侯,就是写在这个表的二进制文件,还原成Visio文件,进行打开的。
  
  
  
  2)C#进行Visio开发的准备工作

  安装Visio2007、VisioSDK2003和2007版
  Visio2007是推荐的开发版本,因为目前基本上Visio2007应用比较多了,而且2003估计也买不到了,另外Visio的SDK,建议两个版本的都要安装,互补下相信息的不足。如VisioSDK2003中 有对象模型图,2007中没有。
  
  熟悉Visio Drawing Control控件使用
  这个控件的熟悉使用时非常重要的,因此在开发之初,最好能够多用这个控件做一些简单的例子,了解里面的各种属性、函数,以及事件的处理等。这样对于开发一个复杂的系统,是非常有帮助的。
  
  Visio开发帮助文档
  VisSDK.chm
  Visio Code Samples Library.chm
  这两个帮助文档基本上涵盖了Visio开发的方方面面,其中有很多代码可以用来做参考,里面对于一些概念或者对象的说明及分析,也是非常独到和有帮助的,虽然是英文的内容,看起来比较费劲,但是开发文档的英文都是比较简单的,应该多看看。
  
  Visio2007文档操作
  查看ShapeSheet属性及帮助内容
  这个是无可替代的开发熟悉内容,里面的对于各个ShapeSheet的属性描述,更是进阶高级Visio开发的必经之路。
  Visio宏的录制
  要熟练掌握Office的宏录制和查看功能,对于Visio开发来说就是熟悉和了解宏代码了,里面如何操作Visio对象,是很有参考意义的。
  
  设置Visio文档的开发人员模式
  
  
  切换Visio的ShapeSheet视图
  
  
  ShapeSheet视图
  
  
  
  
  3)Visio的编程对象模型
  Visio二次开发中,对于其对象模型的了解,就写我们吃饭用筷子一样重要,否则不熟悉筷子的使用场景和方法,是吃不到东西的。
  其中主要的是下面几个对象:
  Application
  Window (Application.ActiveWindow)
  Document (Application.ActiveDocument)
  Master、Shape、Cell
  一个程序中,就只有一个Application对象,类似进程的概念;打开的Visio文件有很多窗口,有一个ActiveWindow的主窗口,选区窗口、形状窗口等;模具文件打开后也是一个Document、打开的Visio文件也是一个Document、ActvieDocument是指当前Visio窗口对应的文档,每个Visio的Document有一个或者多个Page,如系统中有两个Page、一个为绘图Page,一个为背景Page。
  模具文件里面有很多Master,Master类似于模板的概念,一个Master代表一个设备类型、Shape是定义一个图形的信息,模具里面的Master有且只有一个Shape,每个Shape又有很多Cell,代表一个ShapeSheet里面的一个格子,每个格子都有一个唯一的引用名称的。
  Visio文档里面,和模具文件不同,里面一个大千世界,有很多Master,也很多Shape和Cell,但是由于我们看到图纸可能一个模具的设备会有拷贝多个,因此它们公用一个Master,也就是一个Master有多个Shape引用,我们分析文件,就知道里面有一个MasterID,有点像数据库里面的外键一样。
  
  下面是VisioSDK2003中的对象模型图,概括了各个对象之间的关系。
  
  
  
  关于拓扑关系
  Visio自己的拓扑关系信息很少,除了有一个Connection知道设备的两个连接关系外,信息比较少,如果需要做设备的拓扑图形分析,需要保存他们自己的关系到数据库中,指定一个开始的设备,然后对图形进行分析,如系统中的停电分析、线损分析等,都是在数据库中进行分析,实现的效果还不错,就是会比较麻烦一些。
  
  
  Visio XML格式文件分析
  Master格式
  Pages/Shapes格式
  
  Visio的XML文件之Master部分
  
  图纸的XML文档中,Master后面的Shapes集合中只有一个Shape对象

  图纸的Shapes集合有多个对象,每个对象的NameU和Name值可能不一样,一般使用NameU
  
  Visio的XML文件之Pages、Shapes
  
  Visio中很多属性都有一个同名+U的属性名称,一般情况下最好使用这个名称如NameU,因此这个是一个唯一的名字,有时候你会发现Name相同,但他们就是不一样,因为他们的NameU名称不一样的。
  
  模具文件操作
  
  
  
  
  本文是综合了所有讲过和未讲过的Visio开发知识,有些地方时前面介绍很少或者带过的,在此做了深层次的分析和介绍,对于Visio开发和探索,国内资料相对比较少,很多是探索性和尝试性的研究,希望本文能够为大家做一定的指引作用。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 怎样正确的运用微博推广 sql从一个表查询数据,插入到另一个表中 请专业人士来回答,最好是教师,怎么打淘气孩子,应该打哪里?最好让... 小孩不听话打哪里好 2012后未来10年大学各专业就业率前10名及解析? 求大学生就业难一些现状数据 大学生就业最热门的专业有哪些 近几年大学生就业的情况调查 谁有08-12年的具体点的数据啊? 老公前段时间出轨和别的女人在一起,那次他和别的女人在一起的时候,我经常跟他吵,有一次老公跟我我说? 男的出轨还和别人暧昧。他女朋友会不会原谅他了? 老公前段时间出轨和别的女人在一起过,后来那女的走了,她们就没再联系了,我因为这件事跟他吵了架? 老公前段时间出轨和别的女人在一起过,后来那女的走了后,我经常发信息骂那女的? 大学生就业率最低9个专业? 2011年就业率高的专业及各专业排行率? 太调皮了,要挨打,打哪里最好? 老公前段时间出轨和别的女人在一起,后来那女的也走了,一个小三都不要的男人能要吗? 现在大学生的就业率在多少?你如何评价? 每年全国有多少大学生毕业生和专科生?就业率是多少? 为什么男人出轨和别的女人一直同房十年他从不提她老婆? 中国大学生就业报告出炉,哪些专业工作好找,工 Visio 2013 数据库模型图 关系箭头主外键区分 c# 如何打开和关闭Visio文件 visio uml 类有何用途 vsd格式文件怎么样进行编辑 2022年属虎姓王起用岚怎么起名 给虎年出生的小女孩取名,我姓王,要求好听易懂 日本买ysl便宜么?找个代购日本代购的ysl女神粉底才340,要不要买 王姓女孩,农历虎年正月初十早上5点30分出生,帮帮我。取个名字, 雅诗兰黛新沁水粉底液30ml 代购需要多少钱 蓝色棉服搭配什么颜色内搭 雅诗兰黛沁水粉底液加拿大代购280为什么比香港还便宜,在香港390算贵吗... 这个粉底液的价格是多少? 宝蓝色羽绒服该搭配什么颜色的打底裤和靴子? 想买一个黄金手镯自己戴,请问买黄金首饰应该注意什么? 人会不会被吓死? 人能被吓死吗? 有没有人吓人吓死人的概率 人真的可能被吓死吗?这个过程要多久?有什么症状? 人会被吓死吗? 人会被吓死么?我刚才被吓了一跳,心跳的特别大声,我会不会被下出啥毛病