我想按代码更改Visio中BPMN-Shape的颜色。到目前为止我所做的是改变" LineColor" Visio中ShapeSheet的单元格,包含以下代码段:
_startShape.CellsU["LineColor"].FormulaForceU = "=RGB(255,0,0)";
然而,我自己绘制的形状并没有改变颜色。 ShapeSheet-Cell中的信息/值正在变化,但颜色仍然不可见。我读到了保护细胞的GUARD功能,但FormulaForceU
应该忽略GUARD。
导入的形状正在按预期更改!只是自绘不会变为红色(RGB(255,0,0)。
我无法弄明白为什么!有谁经历过同样的经历?
提前致谢!
答案 0 :(得分:2)
如果形状是一个组,那么您还需要更改子形状。
答案 1 :(得分:1)
答案 2 :(得分:1)
答案 3 :(得分:0)
尝试使用visio默认系统颜色常量 - vbRed或2 - VisDefaultColors Enumeration (Visio)
_startShape.CellsU [" LineColor"]。FormulaForceU = 2;
答案 4 :(得分:0)
我在俄罗斯stackoverflow帖子中找到了这个建议(使用CellsSRC语法) Change text color in Visio
Visio.Cell colorCell = shape.get_CellsSRC((简称)Visio.VisSectionIndices.visSectionCharacter,(简称)Visio.VisRowIndices.visRowCharacter,(简称)Visio.VisCellIndices.visCharacterColor); colorCell.FormulaForceU =" RGB(0,255,255)&#34 ;;
答案 5 :(得分:0)
我有适合我的解决方案。我不认为这是最好的,因为正如Surrogate所指出的那样,您可以深入研究形状解剖并准确查看需要更改的内容。但是,如果没有这种迭代方法,我仍然无法弄清楚如何精确地获得需要改变的形状。这段代码正在改变形状的线条颜色而没有副作用。
public static void HighlightShape(Shape shape)
{
if (shape == null) {
return;
}
var processList = new Queue<Shape>();
processList.Enqueue(shape);
var allShapes = new List<Shape>();
allShapes.Add(shape);
while (processList.Count > 0)
{
var s = processList.Dequeue();
allShapes.Add(s);
if (s.Shapes != null) {
foreach (Shape subshape in s.Shapes) {
processList.Enqueue(subshape);
}
}
}
foreach (Shape s in allShapes)
{
s.CellsU["LineColor"].FormulaForceU = "THEMEGUARD(RGB(255,255,0))";
}
}