Как получить сведения о групповом объекте в MS Visio через C#

#c# #interop #visio #flowchart

#c# #взаимодействие #visio #блок-схема

Вопрос:

У меня есть объект shape, нарисованный как ‘group’ с текстом как ‘P0’, объект group содержит два других объекта small shape с текстом как ‘P1’.

введите описание изображения здесь

Как я могу получить сведения об этом групповом объекте таким образом, чтобы у меня мог быть доступ к тексту всех трех объектов shape — ‘P0’, ‘P1’, ‘P1’. Любая помощь будет высоко оценена.

Ответ №1:

Предполагая, что:

  • целевая форма — это групповая форма (а не контейнер)
  • две вложенные формы являются прямыми дочерними элементами группы

тогда сработало бы следующее:

 //Some method to get your target shape
var shp = vApp.ActivePage.Shapes.ItemFromID[1];

shp.Characters.Text.Dump($"Group shape - ({shp.NameID})");
foreach (Visio.Shape s in shp.Shapes)
{
    s.Characters.Text.Dump($"Sub shape - ({s.NameID})");
}
  

Примечание — Dump метод является всего лишь методом расширения в LINQPad, но вы могли бы заменить его на Console.WriteLine или аналогичный.

Приведенный выше код выдал бы результат, аналогичный этому (где я изменил текст второй вложенной формы на ‘P2’):

введите описание изображения здесь

Кроме того, вы могли бы просто использовать Shape.Text свойство напрямую, но любые поля в тексте не будут расширены. Итак, чтобы получить полный текст таким, каким его видит пользователь, вместо этого вы используете Shape.Characters.Text .