将 Visio 连接器连接到 C# 中的另一个连接器(捕捉到)?

Connection a Visio connector to another connector in C# (Snap to)?

我一直在使用 C# 创建 Visio 流程图、添加形状并连接它们,均使用 AutoConnect() 和 GlueTo(),一切正常。

我一直在想办法连接到连接器而不是“正常形状”。 例如:我的形状 A 和 B 之间有一个连接器,形状 C 需要连接到形状 A 和 B 之间的连接器。 如果我在 Visio 中手动执行此操作,连接器将“捕捉”到 A-B 连接器的中间,它看起来就像我想要的那样,但我无法以编程方式执行此操作。

我借用了下面的自动连接方法来连接形状,并将连接器保存在变量中:

static Shape AutoConnect(Shape fromShape, Shape toShape)
    {
        fromShape.AutoConnect(toShape, VisAutoConnectDir.visAutoConnectDirNone);

        return (
            from Connect c1 in fromShape.FromConnects
            from Connect c2 in c1.FromSheet.Connects
            where c2.ToSheet.ID == toShape.ID
            select c2.FromSheet)
            .FirstOrDefault();
    }

如果我使用上面的方法,我会得到一个未连接的连接器,如果我使用 GlueTo(),我会得到异常:“此操作的目标对象不合适”。 我需要这个的原因是一些流程图有很多并行操作,当它们合并成一个形状时,当流程图接近尾声时,它们会造成连接混乱。 如果有另一种方法可以“合并”连接器,我也很想知道。

据我所知,在 Visio 中无法将一个连接器连接到另一个连接器。当你移动一个形状时捕捉就完成了,它不会在图表中保存任何东西(所以如果你移动任何一个连接的形状,它可能会“断开”)。

您可以尝试更改页面的路由样式:

您可以在创建图表后尝试以编程方式更改路由样式,这可能会清理连接器的“混乱”。