2014-11-06 46 views
0

我有創建Visio應用程序實例的C#代碼,然後打開一些現有的模具,以便我可以獲得我需要的圖形大師。 Visio 2013改變了事情,所以我需要打開2種不同的模具。問題是我在Visio中打開了2張圖紙,每個模具1張。當我構建文檔並保存時,我可以關閉它,但仍然打開另一張空白圖紙。我還在創建繪圖的活動文檔中獲得空的空白頁面。將多個模具添加到相同的Visio表

Visio.Application va = new Visio.Application(); 


    va .Documents.Add(@""); 
    Visio.Documents vdocs = va.Documents; 
    const string templateNameU = "BASFLO_M.VSTX"; 
    const string ConnectorStencilNameU = "BASFLO_M.VSSX"; 
    const string RectangleStencilNameU = "BASIC_U.VSS"; 
    const string stencilNameU = "CONNEC_U.VSSX"; 
    const string connectorMasterNameU = "Dynamic Connector"; 
    const string RectangleMasterNameU = "Rounded Rectangle"; 
    Visio.Master connectorMaster = null; 
    Visio.Master rectangleMaster = null; 


    // open the templates we need     
    Visio.Document vc = vdocs.OpenEx(RectangleStencilNameU, short)Visio.VisOpenSaveArgs.visOpenDocked); 
    va.Documents.Add(templateNameU); 

我試圖關閉所有打開的圖紙有:

foreach (Visio.Document d in va.Documents) 
    { 
     va.Documents[d.Name].Close();        

    } 

    va.ActiveDocument.Close(); 

但這是凌亂。 for循環出於某種原因不會關閉活動文檔。有沒有辦法將多個模具添加到同一個文檔和/或頁面,所以我只使用一個頁面?有沒有辦法刪除空白頁面而不訴諸for循環來獲取頁面名稱來刪除它?我瀏覽過API並沒有看到方法。

回答

1

它看起來像你正在創建兩個文件,即第一個(空)與va.Documents.Add(「」),然後第二個基於模板使用va.Documents.Add(templateNameU)。

如果你不想第一個,就是不創建它..意味着,你可以創建新的文檔,然後打開模板,然後繪製,然後關閉一切,就像這樣:

var doc = va.Documents.Add(templateNameU) 
var stn1 = va.Documents.Open(<first stencil>) 
var stn2 = va.Documents.Open(<second stencil>) 

// ... do stuff with the doc and then close everything... 

doc.Close(); 
stn1.Close(); 
stn2.Close(); 

我錯過了什麼嗎?

順便說一句,要獲得「動態連接器」,你不需要打開「連接器模板」,它包含一個特定的動態連接器。要獲取默認的連接器,你可以只使用Application.ConnectorToolDataObject

此外,您還可以連接使用shape.AutoConnect形狀(這也將使用默認的連接器)

而且,你不需要打開模具具體而言實際上。如果它是模板的一部分,當您基於該模板創建新繪圖時,它將自動打開(因此您可以使用Application.Documents []獲取它們。)

也許有幫助嗎?(繪製2個矩形和它們連接起來):

var doc = va.Documents.Add("BASICD_M.VSTX"); 
var stencil = va.Documents["BASIC_M.VSSX"]; 

var rectMaster = stencil.Masters["Rounded Rectangle"]; 
var rect1 = va.ActivePage.Drop(rectMaster, 1, 1); 
var rect2 = va.ActivePage.Drop(rectMaster, 3, 1); 

rect1.AutoConnect(rect2, Visio.VisAutoConnectDir.visAutoConnectDirNone); 
+0

謝謝你的建議,我會嘗試使用自動連接我最終想要標記連接的兩端,但會看自動連接我繪製網絡圖。 – 2014-11-07 00:14:37

相關問題