首页 新闻 搜索 专区 学院

C# WINFORM 关于 dodragdrop

0
悬赏园豆:20 [已解决问题] 解决于 2015-11-06 11:57

我在程序中使用了dodragdrop,遇见个问题。

dodragdrop的data必须是本地文件,

但是我需要,

将服务器中的文件在拖拽结束后,下载到本地。

我该如何处理?

xuliyuan173的主页 xuliyuan173 | 菜鸟二级 | 园豆:249
提问于:2015-04-30 13:49
< >
分享
最佳答案
1

拖拽的是一个 Ole 对象,拖拽结束时读取对象的 url 属性,然后下载。

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2015-04-30 13:53

哇,你帮了我好多次了,感谢,感谢!

能说的在详细一点吗?  下面是我的代码

private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
string[] files = new string[listView1.SelectedItems.Count];
int i = 0;
foreach (ListViewItem item in listView1.SelectedItems)
{
//AttachmentInfo info = BLLFactory<Attachment>.Instance.FindByID(item.Tag.ToString());
//files[i++] = info.Savepath;
files[i++] = @"C:\Users\XLY\Desktop\新建文本文档.txt";
}

if (files != null)
{
DoDragDrop(new DataObject(DataFormats.FileDrop, files), DragDropEffects.Copy | DragDropEffects.Move);
}
}

xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-04-30 13:56

@xuliyuan173: 我怎么能看出来你在拖拽服务器的文件?

Launcher | 园豆:45045 (高人七级) | 2015-04-30 13:58

@Launcher: 是这样的,listView1只是存放了图标与附件ID,没有具体的文件,(我注释的两行,附件在服务器上),我拖动结束后,应该通过附件ID吧附件下载下来。

xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-04-30 14:47

@xuliyuan173: 请你把你的拖拽的流程给描述清楚。比如我描述在双显示器上拖动记事本窗体,将鼠标移动到记事本窗体的 CAPTION 区,按下鼠标左键,移动鼠标,直至记事本窗体移动到另一台显示器,松开鼠标左键。

Launcher | 园豆:45045 (高人七级) | 2015-04-30 14:55

@Launcher: 我在程序内有一个ListView1,里面有一些图标,这些图标是根据服务器文件后缀生成的,tag保存了附件的ID(通过ID可以去到路径)。

我想下载某些文件(利用拖动,比如拖动到桌面,就把文件直接下载到桌面)。

但是我无法获得DoDragDrop完成时的响应事件。

xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-04-30 15:04
Launcher | 园豆:45045 (高人七级) | 2015-04-30 15:27
Launcher | 园豆:45045 (高人七级) | 2015-04-30 15:30

@Launcher: 谢谢,麻烦你了。我仔细看看在结贴。

xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-04-30 15:31

@Launcher: 我还有个问题也是困扰我好几天了。

http://q.cnblogs.com/q/71640/  

不知道你有没有好的办法帮我解决一下

xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-04-30 15:32
其他回答(2)
0

什么是服务器?你为啥可以拖到服务器的文件呢?

爱编程的大叔 | 园豆:30753 (高人七级) | 2015-04-30 14:26

大叔你好

是这样的,listView1只是存放了图标与附件ID,没有具体的文件,(我注释的两行,附件在服务器上),我拖动结束后,应该通过附件ID吧附件下载下来。

支持(0) 反对(0) xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-04-30 14:48

@xuliyuan173: 对啊,这个要你来写。

你可以拿到具体的文件的URL吧?

支持(0) 反对(0) 爱编程的大叔 | 园豆:30753 (高人七级) | 2015-04-30 14:52

@爱编程的大叔: 可以拿到URL,但是无法获取目标路径和拖动完成的响应事件

支持(0) 反对(0) xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-04-30 15:04

@xuliyuan173: 可以拿到URL,为啥无法获取目标路径呢?

我觉得你还是先自己好好想想吧。

你是WEB开发转WINFORM开发的吧? 使用的词语很古怪。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30753 (高人七级) | 2015-04-30 15:10

@xuliyuan173: 基本猜出来你错在哪儿了。

你拿到的是一个URL,根本不是文件,当然你使用只接收文件类型的Dragdrop一定时候错的。

支持(1) 反对(0) 爱编程的大叔 | 园豆:30753 (高人七级) | 2015-04-30 15:16

@爱编程的大叔: 不好意思 可能我表达的不清楚

我在程序内有一个ListView1,里面有一些图标,这些图标是根据服务器文件后缀生成的,tag保存了附件的ID(通过ID可以去到路径)。

我想下载某些文件(利用拖动,比如拖动到桌面,就把文件直接下载到桌面)。

但是我无法获得DoDragDrop完成时的响应事件。

 

代码

private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
string[] files = new string[listView1.SelectedItems.Count];
int i = 0;
foreach (ListViewItem item in listView1.SelectedItems)
{
//AttachmentInfo info = BLLFactory<Attachment>.Instance.FindByID(item.Tag.ToString());
//files[i++] = info.Savepath;
files[i++] = @"C:\Users\XLY\Desktop\新建文本文档.txt";
}

if (files != null)
{
DoDragDrop(new DataObject(DataFormats.FileDrop, files), DragDropEffects.Copy | DragDropEffects.Move);
}
}

支持(0) 反对(0) xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-04-30 15:24

@xuliyuan173: 点击一个按钮下载我是知道的,你要这样下载可能要费点功夫。

我不清楚能不能做到。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30753 (高人七级) | 2015-04-30 15:28

@爱编程的大叔: 拖动比按钮下载步骤简单,更有直观性,我觉得。所以才打算这么搞。

有人说利用临时文件解决,但是我觉得这样反而会消耗更多资源。

大叔,我还有一个问题困扰我好几天了,不知道你是不是有解决办法。

http://q.cnblogs.com/q/71640/  

再次感谢

支持(0) 反对(0) xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-04-30 15:35

@xuliyuan173: 为啥要用临时文件,因为外面是Explorer在接收,

而不是你的程序在接收,所以如果Explorer支持,则支持。

不支持,就得看你的决心有多大,梦想有多远。(其实是看你愿意为这个付出多少成本)

要么你得给Explorer加Hook,专门接收你这种格式的Dragdrop,

要么就得用临时文件。

为了一点点用户体验,拼成你这样,我也是醉了。

(需要这个体验,我会给客户报价大约100万)

支持(0) 反对(0) 爱编程的大叔 | 园豆:30753 (高人七级) | 2015-04-30 15:40

@爱编程的大叔: 我在尝试一下,麻烦你了啊,谢谢。

支持(0) 反对(0) xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-04-30 15:46

@xuliyuan173: Good Luck.

支持(0) 反对(0) 爱编程的大叔 | 园豆:30753 (高人七级) | 2015-04-30 15:48
1

多看下Windows Shell编程方面的知识就知道怎么做了。

XiaoFaye | 园豆:3087 (老鸟四级) | 2015-05-01 16:17

谢谢

支持(0) 反对(0) xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-05-02 10:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册