标题可能描述的不太清晰,需求大概就是将文件拖拽到制定空间并获取他的路径的操作,实现并不难,但是我第一次用,所以这里记录一下。

首先先将需要拖拽到控件的那个控件的 AllowDrop属性的值改为 true,本文的代码以一个Panel(DragPanel)为例。

接下来主要涉及到三个事件,分别是:DragDropDragEnterDragLeave

其中,DragDrop事件是拖放操作完成时发生的,DragEnter事件是拖拽进入时发生的,DragLeave事件是拖拽离开时发生的。

首先,需要在 DragEnter事件中写下如下代码:

private void DragPanel_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = DragDropEffects.Link;
    }
    else
    {
        e.Effect = DragDropEffects.None;
    }
}

接下来就可以在 DragDrop事件中获取文件的路径了:

private void DragPanel_DragDrop(object sender, DragEventArgs e)
{
    string path = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
    MessageBox.Show("文件路径:" + path);
}

完整Demo:

private void DragPanel_DragEnter(object sender, DragEventArgs e)
{
    this.DragPanel.BackColor = Color.White;//拖拽进入时改变Panel背景
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = DragDropEffects.Link;
    }
    else
    {
        e.Effect = DragDropEffects.None;
    }
}

private void DragPanel_DragLeave(object sender, EventArgs e)
{
    this.DragPanel.BackColor = this.BackColor;//离开时改变背景
}

private void DragPanel_DragDrop(object sender, DragEventArgs e)
{
    string path = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();//获取路径
    this.DragPanel.BackColor = this.BackColor;//改变背景
    MessageBox.Show("文件路径:" + path);
}
最后修改:2021 年 07 月 06 日
如果觉得我的文章对你有用,请随意赞赏