拖放到一个组中 - MS Visio VBA

Drag and Drop into a group - MS Visio VBA

我通过 VBA 宏和用户窗体将 Visio 用作建模工具。模型的形状可以具有与 "child" 相同类型的形状,然后又可以具有 child, ...

目前我只能通过从模板拖放来添加 "top-level" 形状。我正在使用 ShapeAdded 事件打开用户窗体并让用户输入形状数据。

具有 parent 的形状只能通过单独的用户窗体添加,该用户窗体从所有 object 的列表中获取形状数据和 parent object s 在模型中。然后它调用一个函数,该函数遍历页面上的所有形状,直到找到所需的 "parent",然后使用 parent object 的 Drop 方法将新形状放置在正确的位置.然后该形状也被添加到 parent 形状的组中。

有什么方法可以通过拖放来实现吗? IE。我可以通过 VBA 找出用户在哪个 "Parent"-Shape 上放置了新形状,以便我可以通过编程将它们组合在一起吗? (我还需要将 parent-child 关系的信息同步到数据库,因此我需要获取 parent 形状 object 以访问其形状数据)。

我想要这个,因为它允许用户直接在 parent 形状内选择所需的位置,并且从模板拖放比使用用户窗体更直观。

我唯一能想到的选择是在放置形状后打开用户窗体并从用户那里获取 parent 信息,然后找到 parent 形状并将新形状添加到它的group --> 这依赖于用户在拖放形状时从列表中选择相同的 object,这可能会导致问题。我想自动检测新放置形状下方的形状,只让用户输入新形状的数据。

通常您在 Visio 中使用 容器 来实现这种功能,而不是组。这些容器对像您描述的那样的拖放功能更加友好(例如:当用户将一个形状悬停在某个容器上时,它会突出显示,向用户表明它可以作为放置目标使用)。此外,容器提供专门的 API,允许您列出容器中的形状,add/remove 和形状 to/from 容器,以及调整大小的功能。

观看这个教育视频: https://support.office.com/en-us/article/video-organize-shapes-in-containers-75e42442-038a-48f6-9206-b029266cbfc7

或者这个 Microsoft Visio 博客 post:https://blogs.msdn.microsoft.com/visio/2009/08/25/organizing-diagrams-with-containers/

这里是 API 的概述: https://developer.microsoft.com/en-us/visio/blogs/container-list-and-callout-api-in-visio-2010/