Я использую Visio в качестве инструмента моделирования через макросы VBA и пользовательские формы. Фигуры моделей могут иметь формы того же типа, что и «потомок», который затем может иметь потомок, ...
В настоящее время я могу добавлять фигуры «верхнего уровня» только путем перетаскивания из трафарета. Я использую событие ShapeAdded, чтобы открыть форму пользователя и позволить пользователю ввести данные формы.
Фигуры, у которых есть родительский элемент, могут быть добавлены только через отдельную пользовательскую форму, которая берет данные формы и родительский объект из списка всех объектов в модели. Затем он вызывает функцию, которая перебирает все фигуры на странице, пока не находит нужный «родитель», а затем использует метод Drop родительского объекта, чтобы удалить новую фигуру в правильном положении. Затем форма также добавляется в группу родительской формы.
Можно ли как-нибудь реализовать это с помощью перетаскивания? То есть можно узнать через VBA, на какой «Родительской» форме пользователь поместил новую фигуру, чтобы я мог сгруппировать их программно? (Также мне нужно, чтобы информация об отношениях родитель-потомок была синхронизирована с базой данных, поэтому мне нужно получить родительский объект формы для доступа к его данным формы).
Я хочу это, потому что это позволяет пользователю напрямую выбирать нужную позицию внутри родительской фигуры, и более интуитивно понятно использовать перетаскивание с трафарета, чем с помощью пользовательской формы.
Единственный вариант, о котором я мог подумать, - это открыть пользовательскую форму после удаления формы и получить родительскую информацию от пользователя, затем найти родительскую форму и добавить новую форму в ее группу -> это зависит от пользователя выберите тот же объект из списка, на котором он отбрасывает фигуру, что может привести к проблемам. Я хочу автоматически определять форму, которая находится ниже вновь выпавшей формы, и позволять пользователю только вводить данные новой формы.