【问题标题】:Drag and Drop into a group - MS Visio VBA拖放到组中 - MS Visio VBA
【发布时间】:2018-09-07 22:47:08
【问题描述】:

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

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

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

有什么方法可以通过拖放来实现吗? IE。我可以通过 VBA 找出用户在哪个“父”形状上放置了新形状,以便我可以以编程方式将它们组合在一起? (另外我需要将父子关系的信息同步到数据库,所以我需要获取父形状对象来访问它的形状数据)。

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

我能想到的唯一选择是在删除形状后打开一个用户窗体并从用户那里获取父信息,然后找到父形状并将新形状添加到其组中 --> 这依赖于用户当他将形状放在上面时,从列表中选择了相同的对象,这可能会导致问题。我想自动检测新放置的形状下方的形状,只让用户输入新形状的数据。

【问题讨论】:

    标签: vba visio


    【解决方案1】:

    通常您在 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/

    【讨论】:

    • 这似乎是我的解决方案的一个不错的替代方案 - 你知道是否可以从自己的主人制作新的容器形状吗?
    • 是的,当然。您基本上可以制作任何形状的“容器”。它只是您需要定义的几个用户单元(“结构类型”)。看看这个:blogs.msdn.microsoft.com/visio/2010/01/12/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    相关资源
    最近更新 更多