Определение форм, которые вы можете разместить на странице, называется «Мастер». Думайте о формах и мастерах как об аналогичных объектах и классах в ООП. Документ Visio имеет коллекцию мастеров. Мастера, которых вы видите на левой панели, вероятно, не входят в коллекцию Мастеров активного документа. Каждая панель слева - это отдельный документ, называемый трафаретом. Несколько трафаретов могут быть открыты при создании новой диаграммы с использованием шаблона. Чтобы узнать больше об отношениях между документами, трафаретами, мастерами и фигурами, см. Глава 3 Разработка решений Microsoft Visio .
Для доступа к одному из открытых трафаретов используйте коллекцию документов Приложения. Затем вы можете перейти к отдельным мастерам, используя коллекцию мастеров документа. Главный объект имеет свойство Name и свойство Icon .
Существует ряд проблем при использовании свойства Icon в .Net. Свойство Icon является IPictureDisp, вам нужно будет найти способ преобразования его в тип изображения, который вы можете использовать в .Net. Метод IPictureDispToImage в библиотеке VB6 является односторонним, но он работает только в 32-битных исполняемых файлах.
Свойство Icon будет выдавать исключение COM, если вы вызываете вне процесса, то есть из внешнего исполняемого файла, а не надстройки. На самом деле я никогда не использовал его из C #, поэтому не уверен, что свойство IPictureDisp можно маршалировать между COM и .Net.
Если вы не можете использовать свойство Icon, вы все равно можете получить значок, вызвав метод ExportIcon для записи значка в файл или буфер обмена.
Следующий код показывает, как получить имя мастера и как экспортировать значок мастера в файл.
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);