Как добавить контейнер в Visio 2010 через C#?

У меня есть простой код для рисования фигур.

Visio.Shape dropShape = ActivePage.Drop(GetMaster(@"Circle"), x, y);
Visio.Shape dropShape2 = ActivePage.Drop(GetMaster(@"Circle"), x + 3, y);

И я хочу добавить контейнер для этой фигуры

VisApp.ActiveWindow.Select(dropShape, (short)Visio.VisSelectArgs.visSelect);
VisApp.ActiveWindow.Select(dropShape2, (short)Visio.VisSelectArgs.visSelect);

object vsoSelection = VisApp.ActiveWindow.Selection;
Visio.Shape containerMaster = ActivePage.Drop(GetMaster(@"Square"), x -3, y-3);
Visio.Shape container = ActivePage.DropContainer(containerMaster, vsoSelection);

Я нашел этот образец в Интернете, но он не работал. Есть идеи?

1 ответ

Проблема в вашем коде заключается в том, что вы не можете использовать любой случайный мастер в качестве контейнера в вызове DropContainer().

Вместо этого вы должны загрузить трафарет, содержащий контейнер, а затем выбрать один из мастеров контейнера в этом трафарете.

Полный код для этого ниже:

var app = new IVisio.ApplicationClass();

var docs = app.Documents;
var doc = docs.Add("");
var page = app.ActivePage;
short flags = (short)
    ( IVisio.VisOpenSaveArgs.visOpenDocked | 
    IVisio.VisOpenSaveArgs.visOpenRO);

var basic_stencil = docs.OpenEx("basic_u.vss", flags);
var basic_masters = basic_stencil.Masters;
var rounded_rect_master = basic_masters["Rounded Rectangle"];

double x = 2.0;
double y = 3.0;

var shape1 = page.Drop(rounded_rect_master, x, y);
var shape2 = page.Drop(rounded_rect_master, x + 3.0, y+1.0);

var stenciltype = IVisio.VisBuiltInStencilTypes.visBuiltInStencilContainers;

var measurementsys = IVisio.VisMeasurementSystem.visMSDefault;
short containeropenflags = (short) IVisio.VisOpenSaveArgs.visOpenHidden;
string containerstencil_filename = app.GetBuiltInStencilFile(stenciltype, measurementsys);
var container_stencil = docs.OpenEx(containerstencil_filename, containeropenflags);
var containermasters = container_stencil.Masters;
var container = containermasters["Container 1"];

var activewindow = app.ActiveWindow;
short selectargs = (short)IVisio.VisSelectArgs.visSelect;
activewindow.Select(shape1, selectargs);
activewindow.Select(shape2, selectargs);

page.DropContainer(container, activewindow.Selection);
Другие вопросы по тегам