C#拖放文件形成

Posted

技术标签:

【中文标题】C#拖放文件形成【英文标题】:C# drag and drop files to form 【发布时间】:2012-01-22 23:16:27 【问题描述】:

如何通过拖放将文件加载到表单中?

会出现什么事件?

我应该使用哪个组件?

以及拖放到表单后如何确定文件名和其他属性?

谢谢!

代码

   private void panel1_DragEnter(object sender, DragEventsArgs e)
        if (e.Data.GetDataPresent(DataFormats.Text))
              e.Effect = DragDropEffects.Move;
              MessageBox.Show(e.Data.GetData(DataFormats.Text).toString());
        
        if (e.Data.GetDataPresent(DataFormats.FileDrop))

        
   

好的,这行得通。

文件呢?如何获取文件名和扩展名?

这只是一个dragEnter 操作。

【问题讨论】:

各种与拖动相关的事件都以协调的方式一起处理。您是否阅读过相关文档? How do I drag and drop files into a c# application? 的可能重复项 【参考方案1】:

此代码将循环并打印拖入窗口的所有文件的全名(包括扩展名):

if (e.Data.GetDataPresent(DataFormats.FileDrop))

      string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
      foreach (string filePath in files) 
      
          Console.WriteLine(filePath);
      

【讨论】:

【参考方案2】:

查看以下链接了解更多信息

http://doitdotnet.wordpress.com/2011/12/18/drag-and-drop-files-into-winforms/

private void Form2_DragDrop(object sender, DragEventArgs e)

    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    
      string[] filePaths = (string[])(e.Data.GetData(DataFormats.FileDrop));
      foreach (string fileLoc in filePaths)
        // Code to read the contents of the text file
        if (File.Exists(fileLoc))
          using (TextReader tr = new StreamReader(fileLoc))
          
            MessageBox.Show(tr.ReadToEnd());
          
    

【讨论】:

链接内容的摘要需要高质量的答案。并且在发布指向您自己博客的链接时要小心:它看起来非常像垃圾邮件。【参考方案3】:

当然,当您的 Control/Form AllowDrop 属性为 true 时,您需要使用以下 2 个事件。

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

    private void Home_DragDrop(object sender, DragEventArgs e)
    
        if (e.Data.GetDataPresent(DataFormats.FileDrop))
        
            string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
            //YourOpenMethod(files);
        
    

享受...

【讨论】:

我认为在这种情况下最好使用DragEnter 而不是DragOver 以节省处理器时间。

以上是关于C#拖放文件形成的主要内容,如果未能解决你的问题,请参考以下文章

C# ListBox 不允许拖放

恢复文件拖放

C# 在 Canvas 中拖放图像

WPF 拖放 C# 也可以拖动图像

C# 拖放 - 使用基类的 e.Data.GetData

为啥这个 Selenium 的拖放 C# 代码在 Chrome 上不起作用?