Как я уже говорил в ответе выше (который вы помечены как не полезно) вы ориентируетесь неправильная формы.
Теперь, когда вы изменили свой вопрос, чтобы включить более подробную информацию, ясно, с какой формой вы имеете дело.
Форма, на которую вы нацеливаетесь, выглядит как «свернутый подпроцесс» из трафарета «Основные формы BPMN». Это групповая форма, а верхний уровень не имеет геометрии, поэтому изменение цвета, как вы делаете в своем вопросе, не имеет визуальных изменений. Чтобы решить эту проблему, вам нужно найти подформу, которая используется для отображения фона. Бывает, что в этом конкретном хозяине субформа, содержащая заполнение, которое вам нужно настроить, имеет индекс, который больше, чем родительский, поэтому вы можете использовать его в коде. Форма не содержит каких-либо других четких функций (например, ячейки пользователя), которые могли бы сделать лучшего кандидата, поэтому учтите, что этот метод предназначен именно для этой конкретной формы.
Учитывая, что вы, кажется, выполняете справедливую работу с этим трафаретом, мой подход состоял в том, чтобы создать копию шаблона и внести некоторые изменения в мастера, чтобы сделать такое взаимодействие немного легче, но я надеюсь, что на этот вопрос ответит следующий код.
Пожалуйста, отметьте это как ответ, если это так.
public void OnCheckFillBPMN()
{
Color fillColor = Color.FromArgb(1, 255, 0, 0);
CollapsedSubProcessFill(this.Application.ActiveWindow.Selection.PrimaryItem, fillColor);
}
private void CollapsedSubProcessFill(Visio.Shape vShpIn, Color fillColor)
{
if (vShpIn != null && vShpIn.Master != null && vShpIn.Master.NameU.StartsWith("Collapsed Sub-Process"))
{
//The sub-shape that provides the fill colour in
//the 'Collapsed Sub-Process' master is the first index
//after the group shape.
//If you want to use a different method to locate the
//correct sub-shape then do that here.
var targetSubShpId = vShpIn.ID + 1;
var targetShp = TryGetShapeInCollection(vShpIn.Shapes, targetSubShpId);
if (targetShp != null)
{
var targetCell = targetShp.get_CellsSRC(
(short)Visio.VisSectionIndices.visSectionObject,
(short)Visio.VisRowIndices.visRowFill,
(short)Visio.VisCellIndices.visFillForegnd);
targetCell.FormulaU = "RGB(" + fillColor.R
+ ',' + fillColor.G
+ ',' + fillColor.B + ')';
}
}
}
private Visio.Shape TryGetShapeInCollection(Visio.Shapes vShps, int shpId)
{
try
{
if (vShps != null)
{
var targetShp = vShps.ItemFromID[shpId];
return targetShp;
}
}
catch (System.Runtime.InteropServices.COMException ex)
{
if (ex.ErrorCode == -2032465756) //Invalid sheet identifier
{
return null;
}
}
return null;
}
Спасибо за ответ. внутрь. :) – Arshad
Итак, в этом случае, если мне нужно заполнить задание, то это тоже такая же процедура ..? – Arshad
Спасибо, что это работает .. !! Но что, если его нормальная форма как Task и т. Д., А не рухнувший подпроцесс .. ?? – Arshad