gpt4 book ai didi

c# - 如何将项目从 C# 窗体拖放到其他应用程序上?

转载 作者:太空狗 更新时间:2023-10-30 00:59:04 28 4
gpt4 key购买 nike

我想知道我们如何在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com