标题可能描述的不太清晰,需求大概就是将文件拖拽到制定空间并获取他的路径的操作,实现并不难,但是我第一次用,所以这里记录一下。
首先先将需要拖拽到控件的那个控件的 AllowDrop
属性的值改为 true
,本文的代码以一个Panel(DragPanel
)为例。
接下来主要涉及到三个事件,分别是:DragDrop
,DragEnter
,DragLeave
其中,DragDrop
事件是拖放操作完成时发生的,DragEnte
r事件是拖拽进入时发生的,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);
}