2014-11-06 94 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

相关问题