我正在尝试为Visio 2013和2015创建自定义VSTO AddIn,其中我在锚点视图中有一个项目列表。我想允许用户从列表中拖动项目并将其放在Visio页面上。一旦丢弃,我想使用drop的x和y坐标,以便我可以创建特定的形状和连接器。我找不到任何展示如何完成这项工作的文章或样本。我发现的唯一参考是如何为Word 2010实现这一点,我无法获得他们用于Word的技术用于Visio。
非常感谢任何协助和指导。
答案 0 :(得分:0)
实际上并没有那么复杂。这篇(我的)很老的帖子解释了如何从内存流中删除形状:
http://unmanagedvisio.blogspot.co.at/2010/05/persisting-visio-shapes.html
如果你想从模板上删除现有的主人(下面的代码假定"基本形状",那么它可能更容易。你只需要处理"项目拖动" in你的表单,然后将拖动对象设置为所需的主.DoDragDrop是一个内置函数(下面的代码假设winforms,对于不同的框架,你可能需要一个不同的方法)。无论如何,基本的想法是" Master& #34; visio对象实现了IDataObject接口,这足以使拖放工作。
假设您的列表视图有两个项目,名为" Triangle"和" Circle",如果你拖动"三角形"项目,你应该得到"三角形"形状和圆圈分别为#34;圆圈。
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);
}