如何通过编程获取形状外向连接器及形状放置后重命名连接器?
我来帮你搞定这两个Visio编程的常见需求,直接上实用方案:
1. 编程获取某个形状的所有外向连接器
要拿到一个形状的所有外向连接器,核心是利用Visio对象模型里的Shape.Connects集合——这个集合包含了所有从当前形状出发的连接关系,每个Connect对象对应的Connector属性就是你要找的连接器形状。
举个VBA的实现例子,直接就能用:
Sub GetOutgoingConnectors(targetShape As Visio.Shape) Dim conn As Visio.Connect Dim connectorShape As Visio.Shape ' 遍历所有从目标形状出发的连接 For Each conn In targetShape.Connects Set connectorShape = conn.Connector ' 输出连接器信息,也可以在这里做后续处理 Debug.Print "外向连接器名称: " & connectorShape.Name & ", ID: " & connectorShape.ID Next conn End Sub
如果用C#等.NET语言调用Visio API,逻辑完全一致,只是语法需要调整成对应语言的写法。
2. 放置形状后重命名连接器
当你放置完shape2并建立好和shape1的连接后,要重命名两者之间的连接器,可以按以下步骤来:
- 先筛选页面上的所有连接器(通过
Shape.Type = visTypeConnector判断) - 检查每个连接器的
FromSheet(起始形状)和ToSheet(目标形状)是否是shape1和shape2(要考虑双向连接的情况) - 找到匹配的连接器后,修改它的
Name(显示名称)或者NameU(通用名称,不受语言设置影响)属性
同样给个VBA的示例:
Sub RenameConnectorBetweenShapes(shape1 As Visio.Shape, shape2 As Visio.Shape, newName As String) Dim pageObj As Visio.Page Dim shp As Visio.Shape Set pageObj = shape1.Parent ' 假设两个形状在同一个页面上 For Each shp In pageObj.Shapes ' 只处理连接器形状 If shp.Type = visTypeConnector Then ' 检查是否连接了目标的两个形状(双向都要判断) If (shp.FromSheet.ID = shape1.ID And shp.ToSheet.ID = shape2.ID) Or _ (shp.FromSheet.ID = shape2.ID And shp.ToSheet.ID = shape1.ID) Then ' 重命名显示名称 shp.Name = newName ' 如果需要通用名称(不随Visio语言变化),替换成下面这句 ' shp.NameU = newName Debug.Print "连接器已成功重命名为: " & shp.Name Exit For ' 找到目标连接器后直接退出循环,提升效率 End If End If Next shp End Sub
额外提个小技巧:如果是通过代码自动创建的连接,其实可以在创建连接器的瞬间就拿到它的对象,直接赋值名称,不用遍历整个页面,效率会更高。比如用Page.Drop方法放置连接器后,直接操作返回的Shape对象即可。
内容的提问来源于stack exchange,提问作者Abhishek Agrawal
相关产品推荐
相关产品推荐

