Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以从Visio中的模具获取形状?_C#_Visio - Fatal编程技术网

C# 是否可以从Visio中的模具获取形状?

C# 是否可以从Visio中的模具获取形状?,c#,visio,C#,Visio,假设我在Visio中打开了一个文档,并且在Visio加载项代码中有一个指向该文档的指针。是否可以从模具中获取以下信息: 形状名称(我指的是类型,而不是唯一的名称) 图画 据我所知,图表和模具是当前文档的一部分。那么,如何从文档指针移动到可用的模具表单呢 (我所说的模板是指左侧的面板,用户可以在其中看到所有可用的形状) 提前谢谢。 Dan可以放在页面上的形状定义称为母版。将形状和主控形状视为类似于OOP中实例化的对象和类。Visio文档具有Masters集合。在左窗格中查看的母版可能不在活动文档的

假设我在Visio中打开了一个文档,并且在Visio加载项代码中有一个指向该文档的指针。是否可以从模具中获取以下信息:

  • 形状名称(我指的是类型,而不是唯一的名称)
  • 图画
  • 据我所知,图表和模具是当前文档的一部分。那么,如何从文档指针移动到可用的模具表单呢

    (我所说的模板是指左侧的面板,用户可以在其中看到所有可用的形状)

    提前谢谢。
    Dan

    可以放在页面上的形状定义称为母版。将形状和主控形状视为类似于OOP中实例化的对象和类。Visio文档具有Masters集合。在左窗格中查看的母版可能不在活动文档的母版集合中。左侧的每个窗格都是不同的文档,称为模具。使用模板创建新图表时,可以打开多个模具。要了解有关文档、模板、母版和形状之间关系的更多信息,请参阅

    要访问其中一个打开的模具,请使用应用程序的文档集合。然后,您可以使用文档的母版集合访问各个母版。主对象具有和属性

    在.Net中使用Icon属性有许多挑战。Icon属性是IPictureDisp,您需要找到一种方法将其转换为可在.Net中使用的图像类型。VB6库中的方法是单向的,但它仅适用于32位可执行文件

    如果调出进程外,即从外部可执行文件而不是外接程序调出,Icon属性将引发COM异常。我从来没有在C#中实际使用过它,所以我不确定IPictureDisp属性是否可以在COM和.Net之间封送

    如果您不能使用Icon属性,您仍然可以通过调用将图标写入文件或剪贴板的方法来获取图标

    下面的代码显示如何获取主控形状的名称以及如何将主控形状图标导出到文件

    using Visio = Microsoft.Office.Interop.Visio;
    
    ...
    
    // Create a new Basic Flowchart diragram ("_U" specifies the US units version).
    Visio.Document docDiagram = app.Documents.Add("BASFLO_U.VST");
    
    // Get a reference to the Basic Flowchart Shapes Stencle which was opened by
    // the template above.
    Visio.Document docStencle = app.Documents["BasFlo_U.vss"];
    
    // Get the Decision master from the Stencil.
    Visio.Master master = docStencle.Masters["Decision"];
    
    // Get the name of the Decision master
    string masterName = master.Name;
    
    // Export the Icon from the Decision Master. 
    // You could use GetTempFileName here.
    master.ExportIcon(
        @"c:\temp\icom.bmp", 
        (short) Visio.VisMasterProperties.visIconFormatBMP);
    
    我明白了:

         Visio.Application app = Globals.ThisAddIn.Application;
         Visio.Documents docs = app.Documents;
         ArrayList masterArray_0 = new ArrayList();
         ArrayList masterArray_1 = new ArrayList();
         Visio.Document doc_0 = docs[1];    // HERE IS THE MAIN POINT
         Visio.Document doc_1 = docs[2];    // HERE IS THE MAIN POINT
         Visio.Masters masters_0 = doc_0.Masters;
         Visio.Masters masters_1 = doc_1.Masters;
         foreach (Visio.Master master in masters_0)
         {
            masterArray_0.Add(master.NameU);   // THIS WILL CONTAIN DIAGRAM FIGURES
         }
         foreach (Visio.Master master in masters_1)
         {
            masterArray_1.Add(master.NameU);  // THIS WILL CONTAIN STENCIL FIGURES
         }
    
    “docs”数组成员编号中有一个关键点,它们从1开始,而不是像用于数组那样从0开始。 谢谢你的帮助。这个问题应该是封闭的