c# – 从.net winforms应用程序实现文件拖动到桌面?

我有一个文件列表,其名称在列表框中,其内容存储在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);
    }
}

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...