【问题标题】:C# drag and drop files to formC#拖放文件形成
【发布时间】: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 操作。

【问题讨论】:

标签: c# winforms drag-and-drop


【解决方案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 以节省处理器时间。
    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 2011-09-22
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多