C#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打开指定文件后,如若要再一次关联到差其余文件上去,须要经过马尔斯hal.ReleaseComObject方法来刑释解教已有的对象,如若是新建一个Visio文档,则不须要这么操作。

  答案:错,均需要释放对象。

 

13)Visio开发的Winform程序,可以利用三种艺术贯彻右键菜单:一种是由此捕捉Visio控件的MouseUp伊芙nt事件,一种是通过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文件,并在图片上右键,展现右键菜单【测试】 

C# 1 

一呼百应菜单操作后,界面弹出对话框,提醒相关的新闻,如下图。 

C# 2 

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

       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(源码)

 

相关文章