永发信息网

c#中如何添加Visio Drawing Control 控件?

答案:3  悬赏:50  手机版
解决时间 2021-01-31 20:43
c#中如何添加Visio Drawing Control 控件?
最佳答案
1、电脑安装visio需要的版本,最新的是2010

2、在C#界面上用工具,添加引用COM

3、找到Visio Drawing Control 12.0(visio2007版本)或Visio Drawing Control 14.0(visio2010版本),勾选上,确定就可以了

4、就会在左侧工具上看到Visio Drawing Control了,然后拖进新建的WinForm就行了。

或者在右侧,引用上单击右键,添加类型中,同样打开添加引用对话框,按照上述方法找到对应的添加了就可以用了。
全部回答
先添加引用类型库,后在控件栏中加入控件,即可

其实就是C#访问VISIO的自动化模型,以前做了不少C#和Excle及word 的交互工程,在用VS2010 尝试开发Visio 2007项目时,却忘了当时要安装Office 2003 开发SDK。所以开发visio工程,也要下载安装office 2007 开发sdk。英文版的。
然后就建立一个C#项目。在工具箱上点右键,选择“选择项”,在打开的对话框中选择“com控件",在其中找到visio 12.0 drawing control。然后该控制就被添加到工具箱。还需要引用类型库否?貌似是不需要。
在cs文件中using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Visio;之后,就可以引用对象:
也可以直接访问拖上form的visio 控件。
 
axDrawingControl1.Window.ShowRulers = 0;
axDrawingControl1.Window.ShowGuides =   0;
axDrawingControl1.Window.ShowPageTabs =   false;
axDrawingControl1.Window.Zoom = -1;
axDrawingControl1.Window.Application.Documents.OpenEx(stencilPath,(short)VisOpenSaveArgs.visOpenRO+(short)VisOpenSaveArgs.visOpenDocked);




注意由于office系列的本质是vb模型,所以在C#中调用要有一些变化,比如showguides等属性设置不能直接用true和false。以前在开发excle时,还有调用模型方法时VB的变参到C#调用的转换问题。下面的openEx,将以只读和dock方式打开一个自己创建的“模具”(.vss文件),这个模具将同样出现在控件窗口内,供visio文档绘图使用。


如何使用C#进行Visio二次开发-总结版
很久没有写C#进行Visio二次开发的文章了,这次温习一下Visio二次开发的相关知识,全面总结一下Visio 二次开发的方方面面。一方面让对Visio的开发不太了解人员有一个全局的认识,对已经看过我前面文章的人来一个回顾总结。
本次主要根据我在Visio二次开发过程中,获得的一些实际系统开发经验以及学习历程,分三个方面对下面内容进行介绍:
1)介绍C#的Visio二次开发管理系统的架构设计思路
2)介绍C#进行Visio开发的准备工作
3)Visio的编程对象模型
 
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开发和探索,国内资料相对比较少,很多是探索性和尝试性的研究,希望本文能够为大家做一定的指引作用。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
老公在外有别的女人在家会有什么表现
中国邮政储蓄银行(焕文路支行)地址在哪,我要
oppo手机性价比怎么样
荆门哪里有澡堂
什么叫薄层层析法?原理是什么啊?
(4.72一3.97)x4.8的简算
中国邮政储蓄银行(宝秀镇支行)地址在什么地方
贞绠的意思是什么啊?知道的请说下!
iphone5c主板漏电修得多少钱 电池就能待机4个
你好,请问苹果6电源芯片换一个多少钱?
中国农业银行(石屏县支行城郊分理处)地址在哪
火锅底料除了吃火锅还有其他吃法吗
【皮内注射角度】皮内注射的角度及深度?
反倒的意思是什么啊?知道的请说下!
浙江省舟山市普陀区沈家门镇邮局的电话是多少
推荐资讯
鸡蛋羹里面放白菜泥和茄子泥核桃仁可以吗
20世纪90年代以来,民族冲突、宗教冲突明显加
【1军】他将了我一军我只好这样做了.
查理九世16册之后换作者了吗
通海文啸酒店地址好找么,我有些事要过去
朝阳招待所(车站路)地址在什么地方,我要处理
物业管理费含电梯维修保养费用吗
闇君的意思是什么啊?知道的请说下!
蒟蒻的意思是什么啊?知道的请说下!
生产日期为2011年10月31日的产品,有效期可标
百盛阳光太阳能地址有知道的么?有点事想过去
信主后心里不想犯罪却又犯了有没有真得救
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?