如何通过C#/VBA代码在Visio连接线形状上添加多段文本?
在Visio连接线上添加多段文本的C#正确实现方式
你的代码存在几个关键问题,导致无法实现多段文本需求:
- 无需将连接线转为组:Visio连接线(Connector)原生支持添加多段文本或独立文本块,转组会破坏连接线的路径关联属性。
TextStyle.PadLeft用法错误:TextStyle是样式对象,不能直接调用PadLeft方法,需通过文本的段落属性设置缩进。- 直接设置组文本只能添加单一段落,无法实现多段文本的位置或内容拆分。
方案1:添加多行(多段落)连续文本
如果需要在连接线上显示连续的多行文本,可直接设置连接线的Text属性并配置段落格式:
// 获取目标连接线形状 Visio.Shape connectorShape = visioPage.Shapes.get_ItemFromID(lastshapeID); // 用换行符分隔不同段落,设置多段文本 connectorShape.Text = "Testing 1\nTesting 2\nTesting 3"; // 获取文本对象,批量设置段落左缩进(单位为英寸,0.39≈10mm) Visio.Characters textChars = connectorShape.Characters; textChars.Begin = 0; textChars.End = (int)textChars.Count; foreach (Visio.Paragraph para in textChars.Paragraphs) { para.IndentLeft = 0.39; }
方案2:在连接线不同位置添加独立文本块
如果需要在连接线的不同路径位置(如起点、中间、终点附近)添加独立文本块,可通过AddText方法将文本绑定到连接线:
Visio.Shape connectorShape = visioPage.Shapes.get_ItemFromID(lastshapeID); Visio.Page visioPage = app.ActivePage; // 创建第一个文本块,绑定到连接线30%位置(0=起点,1=终点) Visio.Shape textBlock1 = visioPage.DrawText(0, 0, "第一段文本"); connectorShape.AddText(textBlock1, 0.3); textBlock1.CellsU("Para.IndLeft").FormulaU = "10 mm"; textBlock1.TextStyle = "Normal"; // 创建第二个文本块,绑定到连接线70%位置 Visio.Shape textBlock2 = visioPage.DrawText(0, 0, "第二段文本"); connectorShape.AddText(textBlock2, 0.7); textBlock2.CellsU("Para.IndLeft").FormulaU = "10 mm";
内容的提问来源于stack exchange,提问作者Nihar Sahoo
相关产品推荐
相关产品推荐

