【问题标题】: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);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      相关资源
      最近更新 更多