拖放到组中 - MS Visio VBA

问题描述 投票:0回答:1

我通过VBA宏和UserForms使用Visio作为建模工具。模型的形状可以具有与“孩子”相同类型的形状,然后再次可以有孩子,......

目前我只能通过从模板拖放来添加“顶级”形状。我正在使用ShapeAdded事件打开用户窗体并让用户输入Shape Data。

具有父级的形状只能通过单独的UserForm添加,该用户窗体从模型中的所有对象的列表中获取Shape Data和父对象。然后,它调用一个Function,遍历页面上的所有形状,直到找到所需的“父”,然后使用父对象的Drop方法将新形状放在正确的位置。然后,该形状也被添加到父形状的组中。

有什么方法可以通过拖放实现这个吗?即我可以通过VBA找到“父” - 形状用户放置新形状,以便我可以编程组合在一起吗? (此外,我需要将父子关系的信息同步到数据库,因此我需要获取父形状对象以访问其Shape数据)。

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

只有我能想到的选项是在删除形状后打开Userform并从用户那里获取父信息,然后找到父形状并将新形状添加到其组中 - >这依赖于用户选择相同的形状列表中的对象,因为他正在放下形状,这可能会导致问题。我想自动检测新丢弃形状下方的形状,只让用户输入新形状的数据。

vba visio
1个回答
2
投票

通常,您在Visio中使用容器来实现此类功能,而不是组。容器对于你所描述的拖放功能非常友好(例如:当用户将形状悬停在某个容器上时,它会突出显示,向用户指示它可用作放置目标)。此外,容器提供专用API,允许您列出容器中的形状,向容器添加/删除和形状,以及调整功能大小。

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

或者这个Microsoft Visio博客文章: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/

© www.soinside.com 2019 - 2024. All rights reserved.