我有一个文件列表,其名称在列表框中,其内容存储在sql表中,并希望我的应用程序的用户能够选择列表框中的一个或多个文件名并将其拖到桌面,桌面上的实际文件.我找不到任何有关如何做到这一点的文档.任何人都可以解释或指出解释吗?
稍后添加:
我已经能够通过处理DragLeave事件来完成这项工作.在其中,我创建一个临时目录中的文件,其中所选的名称和内容从sql Server中提取.然后将文件的路径放入对象中:
var files = new string[1]; files[0] = "full path to temporary file"; var dob = new DataObject(); dob.SetData(DataFormats.FileDrop,files); DoDragDrop(dob,DragDropEffects.Copy);
但是这看起来效率很低,笨拙,而且还没有找出一个很好的方式来摆脱累积的临时文件.
解决方法
我可以帮你一些这里有一些代码可以让你从列表框中拖出一些东西,当桌面上的东西被删除时,它会创建一个你机器上存在的文件到桌面的副本.
public partial class Form1 : Form { public Form1() { InitializeComponent(); this.listBox1.Items.Add("foo.txt"); this.listBox1.MouseDown += new MouseEventHandler(listBox1_MouseDown); this.listBox1.DragOver += new DragEventHandler(listBox1_DragOver); } void listBox1_DragOver(object sender,DragEventArgs e) { e.Effect = DragDropEffects.Copy; } void listBox1_MouseDown(object sender,MouseEventArgs e) { string[] filesToDrag = { "c:/foo.txt" }; this.listBox1.DoDragDrop(new DataObject(DataFormats.FileDrop,filesToDrag),DragDropEffects.Copy); } }