在 C# 中以编程方式更改颜色 Visio 形状

Change Color Visio shape programatically in c#

我想通过代码更改 Visio 中 BPMN 形状的颜色。到目前为止,我所做的是使用以下代码片段更改 Visio 中 ShapeSheet 的 "LineColor" 单元格的值:

 _startShape.CellsU["LineColor"].FormulaForceU = "=RGB(255,0,0)";

但是,我自己画的形状没有变色。 ShapeSheet-Cell 中的 Information/Value 正在更改,但颜色仍然不可见。我读到了保护细胞的 GUARD 功能,但是 FormulaForceU 应该忽略 GUARD。

导入的形状正在按预期变化!只是自绘没有变红(RGB(255,0,0).

我不明白为什么!有没有人经历过同样的事情?

提前致谢!

尝试使用 visio 默认系统颜色常量 - vbRed 或 2 - VisDefaultColors Enumeration (Visio)

_startShape.CellsU["LineColor"].FormulaForceU = 2;

我在俄语 Whosebug 中找到这个建议(使用 CellsSRC 语法)post Change text color in Visio

Visio.Cell colorCell = shape.get_CellsSRC((short)Visio.VisSectionIndices.visSectionCharacter,(short)Visio.VisRowIndices.visRowCharacter,(short)Visio.VisCellIndices.visCharacterColor); colorCell.FormulaForceU = "RGB(0, 255, 255)";

如果形状是一个组,那么您还需要更改子形状。

select任意形状,点击鼠标右键。找到 Group 下拉列表,如果 Ungroup 选项没有变灰则 selected shape 是 group

您还可以通过 Drawing Explorer Window 查看 "shape's anatomy",您可以在 Developer[ 上激活此 window =17=] 功能区选项卡

我有适合我的解决方案。我不认为它是最好的,因为正如 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))";
    }
}