在 Visual C# 应用程序中提供文件拖放功能

本文介绍如何在 Visual C# 应用程序中提供文件拖放功能。

原始产品版本: Visual C++
原始 KB 数: 307966

总结

本文概述的分步过程演示如何在 Visual C# 应用程序中提供文件拖放功能。 ListBox控件用作文件拖放过程的目标。

要求

此列表概述了所需的推荐硬件、软件、网络基础结构和服务包:Visual C# 。

本文假定你熟悉以下主题:

  • Windows Forms ListBox control
  • Windows Forms event handling

生成示例的步骤

ListBox 控件提供两个需要处理的拖放事件: DragEnterDragDrop。 在 DragEnter 控件的边界内拖动对象时,将发生该事件,该事件用于确定是否要拖动的对象是要允许在控件上删除的对象。 对于将文件或文件拖动到控件的情况,可以处理此事件。 这允许在将对象拖动到控件上时显示相应的图标,具体取决于正在拖动的对象。 在 DragDrop 控件上释放正在拖动的对象时发生该事件。 处理此事件以检索对象。 Data 对象用于检索数据。

Data 对象的 GetData 方法返回一个字符串数组,其中包含拖动到 ListBox 控件的文件的完整路径名称。 可以使用此文件路径信息对文件执行所需的任何操作。 例如,可以使用命名空间中的 System.IO 类打开和读取文件、移动文件或将文件复制到新位置。 在此示例中,只需向拖动到 ListBox 控件的文件添加完整路径。

若要在 Visual C# 应用程序中提供文件拖放功能,请执行以下步骤:

  1. 在 Visual C# .NET 或 Visual C# 2005 中创建新的Windows 窗体应用程序。 Form1 默认创建。

  2. 使用工具箱将控件添加到 ListBox Form1

  3. “属性” 窗口中,将 AllowDrop 控件的属性 ListBox 更改为 True ,以允许将对象拖动到控件上。

  4. 在解决方案资源管理器中,右键单击 Form1,然后单击“查看代码”。

  5. 若要处理 DragEnter 该事件,请在 Windows 窗体设计器在类中 Form1 生成的代码节下面添加以下方法:

    private void listBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
    {
        if(e.Data.GetDataPresent(DataFormats.FileDrop))
            e.Effect = DragDropEffects.All;
        else
            e.Effect = DragDropEffects.None;
    }
    
  6. 若要处理 DragDrop 事件,请将以下方法添加到 Form1 紧跟在步骤 5 中添加的方法的类:

    private void listBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
        string[] s = (string[]) e.Data.GetData(DataFormats.FileDrop, false);
        int i;
        for(i = 0; i < s.Length; i++)
            listBox1.Items.Add(s[i]);
    }
    
  7. 若要将两个事件处理程序与控件事件相关联,请在调用InitializeComponent后在Form1构造函数中添加以下代码:

    this.listBox1.DragDrop += new
         System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
    this.listBox1.DragEnter += new
         System.Windows.Forms.DragEventHandler(this.listBox1_DragEnter);
    
  8. 生成并运行该项目。

  9. 将一个或多个文件从桌面或其他文件夹拖动到 ListBox 控件。 文件的完整路径将添加到 ListBox 控件。

参考

有关详细信息,请参阅以下网站: