本人做过多年的Visio二次开发,根据个人的经验总结及项目积累,写了一些小小的随笔文章(具体可参考《伍华聪的Visio二次开发文章》,上月有幸给深圳一个团队做了两天的Visio培训,当了一回客座老师,重新拉起Visio二次开发这面大旗,个人觉得这也是一次比较难忘的一次经历。

本次准备的培训,除了全面介绍Visio的相关知识和概念,还以实战开发的方式加深Visio二次开发的知识掌握,另外还通过试题来考核各个学生的掌握情况,本文主要是介绍我根据自己一直以来的Visio开发经验所得,准备的Visio二次开发试题,并提供相应的解答分析,希望大家批评指正,一起沟通交流。

虽然Visio已经在各行各业应用的很广,不过这两年来关注的博客文章,Visio二次开发方面的文章除了我零星写的一些,其他同行基本上没有文章涉及(可能是没有时间写这方面经验),虽然目前已经很少从项目上去升华、研究Visio二次开发方面的工作(除非又有一些特殊的项目合作需要)。因此,如果这方面我自己有一些新的心得或者资料,我是很乐意和大家一起分享。

一)判断题(每题5分,共20题,总分100分)
1)部署Visio二次开发的应用程序不需要安装Office Visio。
答案:错,开发、部署都需要。
2)Visio的“以开发人员模式运行”模式,能帮助我们查看更多、更细的Visio图元的信息。
答案: 对。
3)形状数据窗口显示的字段信息,是Visio图元内部固定的数据,不能通过代码进行更改。
答案:错,可以通过代码修改,增加、修改、删除均可。
4)通过宏录制功能,可以查看某个功能的具体实现代码,也能实现对图元(Shape对象)等对象属性的调试跟踪。
答案:对。
5)可以通过Visio来实现模具的绘制,修改,调整其内部相应的控制内容,但模具显示的图标不可修改。
答案:错,图标也一样可以修改。
6)Visio Drawing Control控件是一个COM控件,该控件除了提供界面显示Visio文档外,也提供了Visio二次开发中涉及到的Window、Document、Shape、Page、Selection等对象的事件处理。
答案:对。
7)Visio文档里面保存到Shape Data属性数据的时候,数值型、字符型的值保存均要再前后加双引号。
答案:错,数值型是不需要加双引号的。
8)Visio二次开发,可以通过代码实现形状数据窗口、模具文件窗口、扫视和缩放等窗口的可见性进行控制,但不能通过代码调用Visio控件里面的界面组件对象(如CommandBar等UI组件对象)。
答案:错,均可以。
9)Visio除了可以在Winform中通过控件实现对文档的编辑外,也可以通过安装Visio Viewer工具,实现Visio文档基于Web方式的修改编辑。
答案:错,Web方式只能查看,无法实现修改。
10) Visio Drawing Control控件,有一个重要的SRC属性是用来打开或者关闭当前文档,如果开始为该属性指定特定的文件路径后,再次设置SRC为空,那么控件显示的文档就会变为空白文档。
答案:错,SRC只是关闭对引用文件的操作,不会影响文档的显示,还是显示原来的文档。
11)模具文件属性的修改,必须先以读写方式打开模具文档,才能进行相关的操作。
答案:对。
12)Visio文档通过SRC打开指定文件后,如果要重新关联到不同的文件上去,需要通过Marshal.ReleaseComObject方法来释放已有的对象,如果是新建一个Visio文档,则不需要这样操作。
答案:错,均需要释放对象。
13)Visio开发的Winform程序,可以使用两种方式实现右键菜单:一种是通过捕捉Visio控件的MouseUpEvent事件,一种是通过RUNADDONWARGS函数来实现。两种方式效果一样,都带有Visio常用的复制、粘贴、格式、数据等基本的菜单项目。
答案:错,第一种没有其他菜单。
14)属性数据的下拉列表分为:固定列表、可变列表。两者区别前者不可以通过代码增加列表项目,后者可以增加;但两者都可以既从列表中选择数据,也可以输入新的内容。
答案:错误,他们都可以通过代码增加列表项目,只是后者可以选择已有的,也可以输入其他内容。
15)Visio文档提供打印当前页、当前视图、分页打印等操作,同时也支持打印选定区域。
答案:对。
16)如果修改了模具的Master对象的形状数据定义,如增加一个属性字段,那么图纸对应的Master和Shape也能自动实现更新。
答案:错,更新模具形状属性后,需要手动更新图纸的信息。
17)通过代码操作,除了可以修改Shape对象的值外,还可以实现Shape对象的文本内容、字体大小、线条粗细、显示颜色等属性的修改。
对。
18)Visio文档有且只有一个模具模板(Master对象),一个模具对象在文档中可有多个图元(Shape对象)。
答案:对。  
19)一个形状文件包含一系列的模具组合,如开关模具组、跨越模具组。
答案:对。
20)Visio文档可以保存为XML格式文件,通过这个文件可以看到各种Visio对象之间的组织关系。
答案:对。

二)实战开发题(每题50分,共1题,总分50分)

例子要求:

1、打开指定的Visio及模具文件,可以保存Visio文件,导出Visio为CAD。

2、选择打开不同的Visio文件,实现对象释放及重新加载。
3、模仿EnventSink.cs代码实现事件的侦听及处理操作。
4、为页面添加一个右键菜单【测试】,单击测试弹出对话框显示页面数量、当前页面名称、Shape数量。

5、可以打开、隐藏模具文件窗口。

答案:

打开相关的Visio文件,并在图纸上右键,显示右键菜单【测试】

响应菜单操作后,界面弹出对话框,提示相关的信息,如下图。

例子关键的代码如下所示:

private void btnOpen_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Visio文件(*.vsd)|*.vsd|所有文件(*.*)|*.*";
            dlg.FilterIndex = 1;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                OpenVisio(dlg.FileName);
            }
        }

private void OpenVisio(string fileName)
        {
            VisioUtility.CloseAllStencileDocument(VisApplication);

Marshal.ReleaseComObject(VisApplication);
            Marshal.ReleaseComObject(VisDocument.EventList);
            Marshal.ReleaseComObject(VisDocument);
            Marshal.ReleaseComObject(VisWindow);
            GC.Collect();

Thread.Sleep(100);

this.axDrawingControl1.Src = fileName;
            this.axDrawingControl1.Src = "";

InitEventSink(VisApplication, VisDocument);
            this.axDrawingControl1.Document.Saved = true;

List<string> filePaths = GetFilePaths(gStencileFileBasePath);
            foreach (string stencil in filePaths)
            {
                VisioUtility.OpenStencilRead(VisApplication.Documents, stencil);
            }

AddContextMenu();
        }

private void AddContextMenu()
        {
            Visio.Page page = VisioUtility.GetPage(VisDocument, "馈线图");
            bool isEnable = true;
            if (page != null)
            {
                //清除所有相关的菜单事件
                page.PageSheet.DeleteSection((short)VisSectionIndices.visSectionAction);

//加入新的菜单
                VisioUtility.AddRightMouseAction(page.PageSheet,
                    "\"测试\"",
                    "RUNADDONWARGS(\"QUEUEMARKEREVENT\", \"/Drawing=测试\")",
                    isEnable, true, false, false, true, true);
            }
        }

下面提供本次例子的源码,希望对大家学习研究有所帮助:Visio二次开发实战例子Demo(源码)

C#进行Visio二次开发之知识点考核试题相关推荐

  1. C#进行Visio二次开发之判断图纸是否有设备

    判断Visio图纸上是否图纸有设备(存在图元), 有两种方法,一种是通过Window对象的SelectAll方法,在判断选择的集合是否不为空即可,如下:         /// <summary ...

  2. Visio二次开发(二)----Shape的添加和连接

    先说一说为什么我要用到Visio的二次开发,现在做的项目设计到了一些电子地图,下面的这张图片是美工画的一张地铁里面门禁布局图,而这些图在做项目的时候是需要用Visio画的,有提前画好的直接加载到项目中 ...

  3. C#进行Visio二次开发之图纸打印

    几种打印模式 Visio的二次开发中,我们往往需要打印文档,这也是正常不过的需求,Visio的Document对象提供了下面几种打印模式: Constant Value Description vis ...

  4. Visio二次开发(一)----巧用Visio宏

    最近做的项目中需要用到Visio二次开发,安装了Visio的SDK,还有从网上找了一些这方面的博客,Visio的SDK是全英文的,看着有点费劲,很多的东西都不知道该如何去找,不过网上的一些博客还是有一 ...

  5. visio二次开发___事件篇___事件分类

    用visio进行二次开发,不免要用到事件.这里把visio对象模型的所有事件列出来,方便大家查找.第一个事件列表的是按事件名称字母排序的:第二个代码片段是根据分类来展示的.需要注意的是,控件本身有一些 ...

  6. Discuz二次开发相应知识点

    "Discuz"在下文中简称"DZ".要弄DZ二次开发,必须至少具备如下技能: 1)能够理很好理解MVC构架的原理(虽然DZ不是MVC架构的) 2)扎实的PHP ...

  7. C#进行Visio二次开发之电气线路停电分析逻辑

    停电分析,顾名思义,是对图纸进行停电的逻辑分析.在电气化线路中,一条线路是从一个电源出来,连接着很多很多的设备的,进行停电分析,有两个重要的作用:一是看图纸上的Shape元件是否连接正常,二是看哪些设 ...

  8. Visio二次开发Java-画图画线(java+com4j)

    // 创建Visio对象IVApplication visio = ClassFactory.createApplication();//创建新的空白文档[创建一个不基于模板的新绘图]IVDocume ...

  9. 基于Visio的二次开发

    基于Visio的二次开发 前一段时间,由于项目的需要:学习了一些关于Visio二次开发的知识:现在工具基本成形了,也算告一段落了:因此想总结一下关于Visio的二次开发的一些基本知识: 对于基于Vis ...

最新文章

  1. Expect 教程中文版
  2. Ubuntu14.04 64位上配置终端显示git分支名称
  3. 魔兽War3按键精灵Ⅱ(2012-9-4)
  4. English trip -- Review Unit1 Personal Information 个人信息
  5. Ollivander's Inventory(连接查询、单表双实例、子查询)
  6. 十分简洁的手机浏览器 lydiabox
  7. 五大常用算法之三:贪心算法
  8. mysql 隐藏中间四位_MySQL知识体系——索引
  9. android startanimation 回调,ScheduledThreadPoolExecutor执行莫名停止问题Android几个动画回调运行线程...
  10. httpservlet获取请求端IP地址
  11. 造车厂入局网约车 新能源低运营成本或打破“烧钱”怪圈
  12. 京沪无人驾驶复兴号高铁_河北高铁走到今天这一步,太不容易了...
  13. Motrix全能下载神器 无限制版 支持下载HTTP、磁力、FTP、BT、百度网盘等
  14. 找不到该项目(无法删除文件)
  15. 京东快递 单号查询接口 C# .net
  16. java绘图机器猫_canvas哆啦A梦图形代码
  17. ERP和MES、QAS以及APS在制造企业信息化的了解
  18. linux设备驱动之PCI总线概述
  19. 需求-MTK平台降低闪光灯电流
  20. pycharm快速下载第三方库

热门文章

  1. jdk1.6连接sqlserver2005
  2. libuv 中文编程指南(零)前言
  3. 【IBM Tivoli Identity Manager 学习文档】11 TIM设计思路介绍
  4. SQL Server 2005系列教学(2) SQL 服务及创建数据库
  5. 用 Flask 来写个轻博客 (19) — 以 Bcrypt 密文存储账户信息与实现用户登陆表单
  6. 实体类中用基本类型好,还是用包装类型
  7. 【转】【Centos】Centos下用upstart管理自己的服务程序
  8. 世界最成功的僵尸网络使用Fast Flux技术躲避检测
  9. 常用元素位置与大小总结
  10. 零积分下载,2014年辛星mysql教程秋季版第一本已经完工,期待您的支持