程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#進行Visio二次開發之知識點考核試題

C#進行Visio二次開發之知識點考核試題

編輯:C#入門知識

 

本次准備的培訓,除了全面介紹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(源碼)

 

 

 

 

主要研究技術:代碼生成工具、Visio二次開發、送水管理軟件等共享軟件開發

   

  轉載請注明出處:

撰寫人:伍華聰  http://www.iqidi.com

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved