在 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))";
}
}
我想通过代码更改 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))";
}
}