基本信息
源码名称:winform 文件拖拽完整例子源码
源码大小:0.02M
文件格式:.zip
开发语言:C#
更新时间:2013-07-19
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

在WinForm实现一个类似资源浏览器的功能,需要实现将WinForm中列出的文件拖出到其他应用程序中或者从其他应用程序中将文件拖入到Winform应用中。网上有一些文章介绍这种功能,但都比较零散,缺少一个完整的例子。为此我编写了一个较完整的实现文件拖入和拖出的例子,并撰写此文一步步讲解如果实现类似功能。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DropDrapFileSimple
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        private void InitListView(ListView listView)
        {
            listView.SmallImageList = new ImageList();
            listView.LargeImageList = new ImageList();

            listView.View = View.Details;
            listView.AllowDrop = true;
        }

        private void ListFolder()
        {
            ListFolder(labelCurFolder.Text);
        }

        /// <summary>
        /// List files in the folder
        /// </summary>
        /// <param name="directory">the directory of the folder</param>
        private void ListFolder(string directory)
        {
            labelCurFolder.Text = directory;

            String[] fileList = System.IO.Directory.GetFiles(directory);
            listViewFolder.Items.Clear();
            listViewFolder.Columns.Clear();
            listViewFolder.Columns.Add("Name", 300);
            listViewFolder.Columns.Add("Size", 100);
            listViewFolder.Columns.Add("Time", 200);

            foreach (string fileName in fileList)
            {
                //Show file name
                ListViewItem itemName = new ListViewItem(System.IO.Path.GetFileName(fileName));
                itemName.Tag = fileName;

                //Show file icon
                IconImageProvider iconImageProvider = new IconImageProvider(listViewFolder.SmallImageList, listViewFolder.LargeImageList);
                itemName.ImageIndex = iconImageProvider.GetIconImageIndex(fileName);

                //Show file size
                System.IO.FileInfo fileInfo = new System.IO.FileInfo(fileName);
                long size = fileInfo.Length;

                String strSize;
                if (size < 1024)
                {
                    strSize = size.ToString();
                }
                else if (size < 1024 * 1024)
                {
                    strSize = String.Format("{0:###.##}KB", (float)size / 1024);
                }
                else if (size < 1024 * 1024 * 1024)
                {
                    strSize = String.Format("{0:###.##}MB", (float)size / (1024 * 1024));
                }
                else
                {
                    strSize = String.Format("{0:###.##}GB", (float)size / (1024 * 1024 * 1024));
                }

                ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem();
                subItem.Text = strSize;
                subItem.Tag = size;
                itemName.SubItems.Add(subItem);

                //Show file time
                subItem = new ListViewItem.ListViewSubItem();
                DateTime fileTime = System.IO.File.GetLastWriteTime(fileName);

                subItem.Text = (string)fileTime.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"); ;
                subItem.Tag = fileTime;

                itemName.SubItems.Add(subItem);
                listViewFolder.Items.Add(itemName);
            }
        }

        private void FormMain_Load(object sender, EventArgs e)
        {
            InitListView(listViewFolder);
            ListFolder(Environment.CurrentDirectory);
        }

        private void buttonSelFolder_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            {
                ListFolder(folderBrowserDialog.SelectedPath);
            }
        }

        private void listViewFolder_DragDrop(object sender, DragEventArgs e)
        {
            try
            {
                String[] files = e.Data.GetData(DataFormats.FileDrop, false) as String[];

                //Copy file from external application
                foreach (string srcfile in files)
                {
                    string destFile = labelCurFolder.Text   "\\"   System.IO.Path.GetFileName(srcfile);
                    if (System.IO.File.Exists(destFile))
                    {
                        if (MessageBox.Show(string.Format("This folder already contains a file named {0}, would you like to replace the existing file", System.IO.Path.GetFileName(srcfile)),
                            "Confirm File Replace", MessageBoxButtons.YesNo, MessageBoxIcon.None) != DialogResult.Yes)
                        {
                            continue;
                        }
                    }

                    System.IO.File.Copy(srcfile, destFile, true);
                }

                //List current folder
                ListFolder();
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            } 
        }

        private void listViewFolder_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }

        }

        private void listViewFolder_ItemDrag(object sender, ItemDragEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (listViewFolder.SelectedItems.Count <= 0)
                {
                    return;
                }

                //put selected files into a string array

                string[] files = new String[listViewFolder.SelectedItems.Count];

                int i = 0;
                foreach (ListViewItem item in listViewFolder.SelectedItems)
                {
                    files[i  ] = item.Tag.ToString();
                }

                //create a dataobject holding this array as a filedrop

                DataObject data = new DataObject(DataFormats.FileDrop, files);

                //also add the selection as textdata

                data.SetData(DataFormats.StringFormat, files[0]);

                //Do DragDrop
                DoDragDrop(data, DragDropEffects.Copy);
            } 
        }
    }
}