如何让应用程序知道 DragDrop?

How to make an application DragDrop aware?

我正在尝试制作一个应用程序,我想在其中将文件从资源管理器直接拖放到应用程序,并且 DataGridView 使用有关已删除文件的信息更新其条目。

这样做不是问题,但我真正想要的是更新表单的 UI 并显示某种消息,例如 'Drop files here to update' 就在我浏览保存文件的应用程序时(还没有掉线)。

我发现 Control.GiveFeedback 可以用来实现我想要的,但不知何故,即使在订阅了事件之后,它也没有被调用。

这是我处理 DragDrop 事件的方式:

 private void dataGridView1_DragDrop(object sender, DragEventArgs e)
 {
     FileInfo[] DroppedFiles = ((string[])e.Data.GetData(DataFormats.FileDrop)).Select(x => new FileInfo(x)).ToArray();
     foreach (FileInfo File in DroppedFiles)
     {
         TrackInfo Track = new TrackInfo(File.FullName);
         PlaylistSource.Add(Track);
     }
 }

先谢谢你。

DragOverDragLeave 是我必须订阅的事件,以便让应用程序了解潜在的 DragDrop 事件。

我是这样处理事件的:

private void label1_DragOver(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = DragDropEffects.Link;
        //Updating UI Controls when file dragged over
        label1.BackColor = Color.Green;
        label1.ForeColor = Color.White;
    }
}

private void label1_DragLeave(object sender, EventArgs e)
{
    //Updating UI Controls when file no longer being dragged over
    label1.BackColor = SystemColors.Control;
    label1.ForeColor = Color.Black;
}

当然一定不要忘记设置控件的AllowDrop属性,让控件真正变成“DragDrop Aware”。