作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道我们如何在 C# 中将项目从 TreeView 拖放到其他 (autocad) 应用程序中。该项目基本上是 autocad 文件 .dwg。
我写了一些代码:
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
TreeNode n = (TreeNode)e.Item;
this.treeView1.DoDragDrop(AcadObj, DragDropEffects.Copy);
}
AcadObj 是一个 autocad 对象。
此事件工作正常但事件 DragDrop 未触发,即使我在 autocad 上拖动时鼠标指针给我加号(此处接受文件)。我的 DragDrop 事件是:
private void treeview1_DragDrop(object sender, DragEventArgs e){
MessageBox.Show("It works");
}
上述事件不起作用,并且没有向我显示 MessageBox。我只实现了这两个事件。
请帮助我并指导我该怎么做
最佳答案
问题是因为内存空间。你看,.NET 将其内存存储在 CLR 中。这意味着,您不能使用 .NET 拖放将任何内容从 .NET 拖放到在不同内存空间中运行的另一个应用程序。
您必须使用进程间拖放。
WINOLEAPI DoDragDrop(
IDataObject * pDataObject, //Pointer to the data object
IDropSource * pDropSource, //Pointer to the source
DWORD dwOKEffect, //Effects allowed by the source
DWORD * pdwEffect //Pointer to effects on the source
);
如果将要拖放的对象包装在您自己的 IDataObject 实现中,则可以将其拖放到任何应用程序中。
我会发布一个示例,但我无法在我的源代码中找到一个“干净”到足以作为示例发布的示例。谷歌一下。寻找使用 C++ COM 的拖放实现。使用它而不是内置拖放的 .NET。
关于c# - 如何将项目从 C# 窗体拖放到其他应用程序上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1437986/
我是一名优秀的程序员,十分优秀!