拖拽的是一个 Ole 对象,拖拽结束时读取对象的 url 属性,然后下载。
哇,你帮了我好多次了,感谢,感谢!
能说的在详细一点吗? 下面是我的代码
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: 我怎么能看出来你在拖拽服务器的文件?
@Launcher: 是这样的,listView1只是存放了图标与附件ID,没有具体的文件,(我注释的两行,附件在服务器上),我拖动结束后,应该通过附件ID吧附件下载下来。
@xuliyuan173: 请你把你的拖拽的流程给描述清楚。比如我描述在双显示器上拖动记事本窗体,将鼠标移动到记事本窗体的 CAPTION 区,按下鼠标左键,移动鼠标,直至记事本窗体移动到另一台显示器,松开鼠标左键。
@Launcher: 我在程序内有一个ListView1,里面有一些图标,这些图标是根据服务器文件后缀生成的,tag保存了附件的ID(通过ID可以去到路径)。
我想下载某些文件(利用拖动,比如拖动到桌面,就把文件直接下载到桌面)。
但是我无法获得DoDragDrop完成时的响应事件。
@xuliyuan173: https://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.dodragdrop(v=vs.110).aspx
这里有拖动事件如何处理。
@Launcher: 谢谢,麻烦你了。我仔细看看在结贴。
@Launcher: 我还有个问题也是困扰我好几天了。
http://q.cnblogs.com/q/71640/
不知道你有没有好的办法帮我解决一下
什么是服务器?你为啥可以拖到服务器的文件呢?
大叔你好
是这样的,listView1只是存放了图标与附件ID,没有具体的文件,(我注释的两行,附件在服务器上),我拖动结束后,应该通过附件ID吧附件下载下来。
@xuliyuan173: 对啊,这个要你来写。
你可以拿到具体的文件的URL吧?
@爱编程的大叔: 可以拿到URL,但是无法获取目标路径和拖动完成的响应事件
@xuliyuan173: 可以拿到URL,为啥无法获取目标路径呢?
我觉得你还是先自己好好想想吧。
你是WEB开发转WINFORM开发的吧? 使用的词语很古怪。
@xuliyuan173: 基本猜出来你错在哪儿了。
你拿到的是一个URL,根本不是文件,当然你使用只接收文件类型的Dragdrop一定时候错的。
@爱编程的大叔: 不好意思 可能我表达的不清楚
我在程序内有一个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);
}
}
@xuliyuan173: 点击一个按钮下载我是知道的,你要这样下载可能要费点功夫。
我不清楚能不能做到。
@爱编程的大叔: 拖动比按钮下载步骤简单,更有直观性,我觉得。所以才打算这么搞。
有人说利用临时文件解决,但是我觉得这样反而会消耗更多资源。
大叔,我还有一个问题困扰我好几天了,不知道你是不是有解决办法。
http://q.cnblogs.com/q/71640/
再次感谢
@xuliyuan173: 为啥要用临时文件,因为外面是Explorer在接收,
而不是你的程序在接收,所以如果Explorer支持,则支持。
不支持,就得看你的决心有多大,梦想有多远。(其实是看你愿意为这个付出多少成本)
要么你得给Explorer加Hook,专门接收你这种格式的Dragdrop,
要么就得用临时文件。
为了一点点用户体验,拼成你这样,我也是醉了。
(需要这个体验,我会给客户报价大约100万)
@爱编程的大叔: 我在尝试一下,麻烦你了啊,谢谢。
@xuliyuan173: Good Luck.
多看下Windows Shell编程方面的知识就知道怎么做了。
谢谢
大哥,我正在做拖动本地文件,你这个程序能不能发给我让我参考下,谢谢