#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
.