【问题标题】:Visio VSTO Drag and DropVisio VSTO 拖放
【发布时间】:2016-05-30 02:02:40
【问题描述】:
我正在尝试为 Visio 2013 和 2015 创建自定义 VSTO 插件,其中我在锚视图中有一个项目列表。我想允许用户从列表中拖动一个项目并将其放在 Visio 页面上。一旦下降,我想使用下降的 x 和 y 坐标,以便我可以创建特定的形状和连接器。我找不到任何文章或示例来说明如何完成此操作。我找到的唯一参考资料是关于如何在 Word 2010 中实现这一点,我无法让他们用于 Word 的技术适用于 Visio。
任何帮助和指导将不胜感激。
【问题讨论】:
标签:
drag-and-drop
vsto
visio
【解决方案1】:
这实际上并没有那么复杂。这篇(我的)相当老的帖子解释了如何从内存流中删除形状:
http://unmanagedvisio.blogspot.co.at/2010/05/persisting-visio-shapes.html
如果您想从模板上的现有母版中拖放(下面的代码假定为“基本形状”,那么它可能会更容易。您只需处理表单中的“项目拖动”,然后将拖动对象设置为想要的master. DoDragDrop是一个内置函数(下面的代码假设winforms,对于不同的框架你可能需要不同的方法)。无论如何,基本思想是“Master” visio对象实现IDataObject接口,这足以使拖动-放下工作。
假设您的列表视图有两个项目,名为“Triangle”和“Circle”,如果拖动“triangle”项目,您应该得到“triangle”形状和“circle”,分别为圆形。
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
var item = (ListViewItem) e.Item;
var app = Globals.ThisAddIn.Application;
var myStencil = app.Documents.OpenEx("BASIC_M.VSS",
(short)VisOpenSaveArgs.visOpenDocked | (short)VisOpenSaveArgs.visOpenRO);
var masterToDrag = myStencil.Masters[item.Text];
var data = new DataObject(masterToDrag);
DoDragDrop(data, DragDropEffects.Copy);
}