2009-11-20 71 views
1

我正在开发的应用程序是用C#编写的Windows窗体应用程序。它有一个树形图。每个treeNode存储一些数据。我想要做的是打开应用程序的两个副本,从一个应用程序中拖动一些treenode并拖放到另一个应用程序。 treenodes存储的数据应该转移到另一个应用程序上,以在另一个应用程序上构建treenode。我想知道如何实现像这样的拖放功能?谢谢你的帮助。如何开始实现不同进程之间的拖放?

+0

我正在为第三个类似的解决方案。党树视图。在正在运行的应用程序的另一个实例中放入一个完全相同类型的控件时:您有一个“代理”。我希望找到一种非API方式来“取消引用”代理,并将其数据放入Dropped on控件中。我认为我有一个解决方案,但结果是无法实现(无论如何,我)。你可以从Groo的答案中“得到一些东西”,这里提出的问题是我最好地提出了http://stackoverflow.com/questions/1699504/c-detect-desktop-folder-mouse-up-during-a-drag-operation, – BillW 2009-11-20 03:44:38

+0

实际上,拖动treenode时,它应该设置底层对象。在丢弃treenode时,应该提取基础数据以构建新的treenode。 – telescope 2009-11-20 07:55:50

回答

1

我想如果你把你的类型标记为[Serializable]并实现自定义序列化,它应该可以工作。否则,您可以将它们自己序列化为一个MemoryStream,然后使用任何自定义数据格式将该MemoryStream添加到该数据对象。

+0

你能详细解释一下吗?如果我在拖动时将它们序列化到内存流中,在另一个进程中删除时是否可以从内存流中获取数据? – telescope 2009-11-20 06:24:57

+1

是的,在调用DoDragDrop之前将它添加到源数据对象中。在目标的DragEnter/DragOver/DragDrop事件中,请重新提供此数据。请务必指定添加数据时使用的相同数据格式。 – logicnp 2009-11-20 08:29:16