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

本人做过多年的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二次开发之知识点考核试题,如需转载请自行联系原博主。

时间: 2024-10-18 11:43:42

C#进行Visio二次开发之知识点考核试题的相关文章

C#进行Visio二次开发之界面设计及架构设计

写C#进行Visio二次开发的系列文章有很多篇了,都是写一些经验总结和技术知识的分享,本文继续来探讨这方面开发的一些心得,主要介绍下WinForm界面的设计和Visio软件的架构设计.先看看我花了N个月的业余时间完成的软件概貌,然后大家一起讨论下相关的技术知识. 软件界面主要有菜单区.工具条区.图纸内容区.右边的管理区.状态条区等等,主要注意的是采用了ToolStripPanel来进行布局,然后并使用了有名的WeifenLuo.WinFormsUI.Docking.dll控件对图纸内容区.右边的

C#进行Visio二次开发之自定义右键菜单

Visio Drawing Control中集成自定义菜单是很多项目必须的,很多朋友也问 过我如何实现这些菜单,下面介绍下Visio自定义菜单的实现. Visio二次 开发中,为Visio Drawing Control添加自定义菜单有两种方式:一种是使用捕捉 Visio的MouseUpEvent事件,弹出ContextMenu即可:另一种是通过在PageSheet中 增加Action来实现,也就是使用RUNADDONWARGS函数来实现. 两种实现的 效果如下图所示,两者的区别是,使用第二种会

C#进行Visio二次开发之动态仿真实现

Visio二次开发可以实现的项目情景很多,如电气线路分析.配电网络分析.流程图等,现因为项目需要,又认识多了一个应用场合,液压传动的仿真.项目效果图如下所示: 查看原图(大图) 动态仿真,其实也就是模拟实际线路的走向,实现动画的展现.以前我的Visio的项目,基本上都是基于静态的图形展现,并没有设置太多的动态展现.原来配电网络的通电线路的分析,严格来说也是静态的,因为基本上是一次性把通电和不通电的线路给绘制出来.而动态仿真则要求慢慢的动画展现线路的走向和颜色变化. 如活塞运动的仿真,要求不停止动

C#进行Visio二次开发之组合形状操作

由于一朋友需要Visio实现仿真模拟Demo,因此我在原来Visio项目代码基础上进行改进调整,完成了其需要的功能.现将对原有Visio二次开发项目的创新思路及成果总结一下,以飨读者,也做为一个标志,供日后参考,或者于各位同行,一起研究切磋.先贴图展示整个项目的该款,表明此文章所托并非空穴来风.纸上谈兵! 本人基于项目的Visio的二次开发文章写了很多,其中涉及到各形状方面的操作,但基本上都是做为一个图形的整体来实现各种效果的,由于仿真需要,需要将换向阀实现左右变换功能,而换向阀是一个组合控件,

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

最近做的项目中需要用到Visio二次开发,安装了Visio的SDK,还有从网上找了一些这方面的博客,Visio的SDK是全英文的,看着有点费劲,很多的东西都不知道该如何去找,不过网上的一些博客还是有一些不错的,前两天发现一个有助于Visio二次开发的方法,下面分享给大家. 就是巧用Visio的宏来帮助你进行二次开发,通过Visio宏的录制功能,将你对Visio的具体操作转换成VBA代码,这样你就会知道它的一些具体是怎么实现的了,下面是具体的步骤: 在Visio中右键,选中开发工具 然后再工具栏中

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

     先说一说为什么我要用到Visio的二次开发,现在做的项目设计到了一些电子地图,下面的这张图片是美工画的一张地铁里面门禁布局图,而这些图在做项目的时候是需要用Visio画的,有提前画好的直接加载到项目中就可以使用,但是有些是需要通过代码也就是二次开发来实现的!      下面说说具体的实现过程:      shape的添加      你只需要找到相应的模板,模板下的形状,就可以加载形状,没有什么困难的,如果你实在不知道,那么就学者去用用Visio宏,对你的学习很有帮助(Visio二次开发

C#进行Visio二次开发之文件导出及另存Web页面

原文:C#进行Visio二次开发之文件导出及另存Web页面 在我前面很多关于Visio的开发过程中,介绍了各种Visio的C#开发应用场景,包括对Visio的文档.模具文档.形状.属性数据.各种事件等相关的基础处理,以及Visio本身的整体项目应用,虽然时间过去很久,不过这些技术依旧还在使用中,最近应客户培训的需要,我对所有的内容进行了重新整理,把一些没有介绍的很详细或者很少的内容进行了丰富,因此本文介绍的主题-Visio二次开发之文件导出及另存Web页面,介绍一下Visio文件另存为其他几种格

如何使用C#进行Visio二次开发-总结版

很久没有写C#进行Visio二次开发的文章了,这次温习一下Visio二次开发的相关知识,全面总结一下Visio 二次开发的方方面面.一方面让对Visio的开发不太了解人员有一个全局的认识,对已经看过我前面文章的人来一个回顾总结. 本次主要根据我在Visio二次开发过程中,获得的一些实际系统开发经验以及学习历程,分三个方面对下面内容进行介绍: 1)介绍C#的Visio二次开发管理系统的架构设计思路 2)介绍C#进行Visio开发的准备工作 3)Visio的编程对象模型 1)Viso二次开发管理系统

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

    Visio在VB6中的开发有很多现成的项目及代码,但在.NET领域相对比较滞后,但是从Visio SDK2007发布以来,给予Visio的C#开发逐渐多了起来,虽然和VB6的开发思路有一定的相似,不过平台不一样,做出来的东西差别还是有一定的距离,虽然总体慢一点,但是,DotNET框架的逐渐强大以及更多的DotNet程序和开发人员的加入,带给大家更高的整合价值以及更美好的发展未来.     本人将会在C#领域将Visio的二次开发进行下去,希望大家一起学习研究,碰撞出更美的火花 Visio