Visio: не удается найти фигуру в фигуре группы

Я переношу код vba на C # с помощью библиотеки Microsoft.Office.Interop.Visio. Мне сложно понять, почему я получаю исключение «Имя объекта не найдено». Код ниже:

foreach (IVisio.Shape t in GroupStall.Shapes)
                    {
                        Console.WriteLine(t.Name);
                    }
                    var aa = "door" + index;
                    IVisio.Shape test = GroupStall.Shapes.ItemU[aa];

Я использую для каждого цикла для отладки. На выходе foreach:

headrail2
headrail1
toilet1
toprail1
siderail1A
door1
stallwidth1

Я уже знаю, что там существует "door1", поэтому мне не нужно всегда проходить цикл foreach только для того, чтобы назначить его объекту формы. Но когда я назначаю форму «door1» для «test», я получаю исключение: «Имя объекта не найдено». Любая помощь в том, почему?


person jediderek    schedule 25.10.2017    source источник


Ответы (1)


Уже нашел ответ на свой вопрос. В C #, если вы хотите назначить объект-фигуру, используя имя фигуры, которое вы используете:

IVisio.Shape test = GroupStall.Shapes["name"]

Мне это показалось странным, потому что я не мог этого сделать в VBA, VBA вам приходилось использовать метод элемента, чтобы найти фигуру по имени:

test = GroupStall.Shapes.Item("name")

Надеюсь, это поможет всем, кто разрабатывает visio с помощью C #.

person jediderek    schedule 25.10.2017
comment
И какой член, по вашему мнению, вызывает ваш индексатор C #? Правильно, какой-то get_Item метод. Также, если Shapes является классом коллекции, по соглашению его свойство Item должно быть его членом по умолчанию, что означает, что Set test = GroupStall.Shapes("name") должен работать. Обратите внимание на ключевое слово Set, необходимое в VBA для назначения любой ссылки на объект. - person Mathieu Guindon; 25.10.2017