如何使用C#结合Microsoft.Office.Interop.Visio为Visio形状添加ScreenTip
C# 操作Visio形状添加ScreenTip报错解决方案
错误原因
- 你遇到的
Unexpected end of file.报错核心原因是默认Visio形状不存在预定义的Controls.TestName行,直接访问Controls.TestName.Tip单元格相当于操作ShapeSheet中不存在的行,引发底层读写异常。 - 附加逻辑错误:
Controls.xxx.Tip单元格存储的是鼠标悬停时展示的提示文本,你赋值"10 pt"不符合业务逻辑,且给Formula属性赋值纯文本时没有加英文双引号包裹,Visio会将内容识别为公式解析,也会触发语法错误。
正确实现方案
方案1:基于Controls Section实现(符合你参考的文档逻辑)
需要先给形状添加对应Controls行再赋值,代码示例如下:
// 原有基础属性设置 visioRectShape.get_Cells("FillForegnd").Formula = "RGB(0,102,255)"; visioRectShape.get_Cells("Char.Size").Formula = "10 pt"; // 1. 给形状新增Controls行 short controlRowIndex = (short)Visio.VisRowIndices.visRowFirst; visioRectShape.AddRow((short)Visio.VisSectionIndices.visSectionControls, controlRowIndex, (short)Visio.VisRowTags.visTagControl); // 给新增的Controls行命名为TestName visioRectShape.RowName[(short)Visio.VisSectionIndices.visSectionControls, controlRowIndex] = "TestName"; // 2. 给Tip单元格赋值提示文本,注意文本外层要加英文双引号 visioRectShape.get_CellsU("Controls.TestName.Tip").Formula = "\"你的自定义提示内容\"";
方案2:更简单的全局形状ScreenTip设置
如果你只需要给整个形状添加通用悬停提示,不需要关联Controls控制点,无需操作ShapeSheet,直接调用形状内置属性即可:
visioRectShape.ScreenTip = "你的自定义提示内容";
内容的提问来源于stack exchange,提问作者samer nassar
相关产品推荐
相关产品推荐

