winform拖拽:实现外部文件拖拽到程序内以及程序内部间的拖拽

本文介绍如何使用C#实现将外部音乐文件(.mp3)拖拽到ListView中,并展示了如何从另一个ListView拖拽音乐文件到目标ListView的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拖拽相关来源推荐:http://www.cnblogs.com/ServiceboyNew/archive/2012/04/29/2476154.html

一、实现了外部音乐文件向ListView1的拖拽.

*****记得先修改ListView1的AlloDrop属性为true

界面如下:

代码如下:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            InitListView();
        }

        private void InitListView()
        {
            listView1.View = View.Details;
            listView1.LabelEdit = true;
            listView1.AllowColumnReorder = true;
            listView1.CheckBoxes = true;
            listView1.FullRowSelect = true;
            listView1.GridLines = true;
            listView1.Sorting = SortOrder.Ascending;


            listView1.Columns.Add("歌曲名", -2, HorizontalAlignment.Left);
            listView1.Columns.Add("PC路径", -2, HorizontalAlignment.Left);

            listView1.Columns[0].Width = 150;
            listView1.Columns[1].Width = 150;

            listView2.View = View.Details;
            listView2.LabelEdit = true;
            listView2.AllowColumnReorder = true;
            listView2.CheckBoxes = true;
            listView2.FullRowSelect = true;
            listView2.GridLines = true;
            listView2.Sorting = SortOrder.Ascending;

            listView2.Columns.Add("歌曲名", -2, HorizontalAlignment.Left);
            listView2.Columns.Add("PC路径", -2, HorizontalAlignment.Left);

            listView2.Columns[0].Width = 150;
            listView2.Columns[1].Width = 150;
        }

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

        }

        private void listView1_DragDrop(object sender, DragEventArgs e)
        {
            string[] files = null;
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                files = e.Data.GetData(DataFormats.FileDrop) as string[];

            if (files == null)
                return;

            List<string> list = new List<string>(files);

            list.RemoveAll((file) =>
            {
                if (!file.EndsWith(".mp3"))
                    return true;
                return !File.Exists(file);
            });

            if (list.Count == 0)
            {
                e.Effect = DragDropEffects.None;
                return;
            }
            string[] musicFiles = list.ToArray();
            foreach (var mp3 in musicFiles)
            {
                string name = Path.GetFileName(mp3);
                name = name.Substring(0, name.LastIndexOf('.')).Trim();
                this.listView1.Items.Add(new ListViewItem(new string[] { name,mp3 }) { Tag = mp3 });
        
            }
            
        }
    }


二、实现了ListView2向ListView1的拖拽

 

直接在上面的基础上进行了如下的修改:(最下面有详细代码)

1.如图:

 

2.如图

-->1

-->2

 

详细代码:

 

 

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            InitListView();
            InitListView2Data();
        }

        private void InitListView2Data()
        {
            string name1 = "动力火车 - 第一滴泪";
            string mp31 = "F:\\KuGou\\动力火车 - 第一滴泪.mp3";
            string name2 = "樊桐舟 - 你是我一生最爱的人";
            string mp32 = "F:\\KuGou\\樊桐舟 - 你是我一生最爱的人.mp3";
            string name3 = "凤凰传奇 - 等爱的玫瑰";
            string mp33 = "F:\\KuGou\\凤凰传奇 - 等爱的玫瑰.mp3";
            string name4 = "付笛声、任静 - 知心爱人";
            string mp34 = "F:\\KuGou\\付笛声、任静 - 知心爱人.mp3";
            string name5 = "高胜美 - 我是不是你最疼爱的人";
            string mp35 = "F:\\KuGou\\高胜美 - 我是不是你最疼爱的人.mp3";

            this.listView2.Items.Add(new ListViewItem(new string[] { name1, mp31 }) { Tag = mp31 });
            this.listView2.Items.Add(new ListViewItem(new string[] { name2, mp32 }) { Tag = mp32 });
            this.listView2.Items.Add(new ListViewItem(new string[] { name3, mp33 }) { Tag = mp33 });
            this.listView2.Items.Add(new ListViewItem(new string[] { name4, mp34 }) { Tag = mp34 });
            this.listView2.Items.Add(new ListViewItem(new string[] { name5, mp35 }) { Tag = mp35 });
        }

        private void InitListView()
        {
            listView1.View = View.Details;
            listView1.LabelEdit = true;
            listView1.AllowColumnReorder = true;
            listView1.CheckBoxes = true;
            listView1.FullRowSelect = true;
            listView1.GridLines = true;
            listView1.Sorting = SortOrder.Ascending;


            listView1.Columns.Add("歌曲名", -2, HorizontalAlignment.Left);
            listView1.Columns.Add("PC路径", -2, HorizontalAlignment.Left);

            listView1.Columns[0].Width = 150;
            listView1.Columns[1].Width = 150;

            listView2.View = View.Details;
            listView2.LabelEdit = true;
            listView2.AllowColumnReorder = true;
            listView2.CheckBoxes = true;
            listView2.FullRowSelect = true;
            listView2.GridLines = true;
            listView2.Sorting = SortOrder.Ascending;

            listView2.Columns.Add("歌曲名", -2, HorizontalAlignment.Left);
            listView2.Columns.Add("PC路径", -2, HorizontalAlignment.Left);

            listView2.Columns[0].Width = 150;
            listView2.Columns[1].Width = 150;
        }

        private void listView1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
                return;
            }
            e.Effect = e.Data.GetData(typeof(string[])) != null ? DragDropEffects.Copy : DragDropEffects.None;

        }

        private void listView1_DragDrop(object sender, DragEventArgs e)
        {
            string[] files = null;
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                files = e.Data.GetData(DataFormats.FileDrop) as string[];
            else
                files = e.Data.GetData(typeof(string[])) as string[];

            if (files == null)
                return;

            List<string> list = new List<string>(files);

            list.RemoveAll((file) =>
            {
                if (!file.EndsWith(".mp3"))
                    return true;
                return !File.Exists(file);
            });

            if (list.Count == 0)
            {
                e.Effect = DragDropEffects.None;
                return;
            }
            string[] musicFiles = list.ToArray();
            foreach (var mp3 in musicFiles)
            {
                string name = Path.GetFileName(mp3);
                name = name.Substring(0, name.LastIndexOf('.')).Trim();
                this.listView1.Items.Add(new ListViewItem(new string[] { name, mp3 }) { Tag = mp3 });

            }

        }

        private int mDragFlag = 0;
        private void listView2_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button != System.Windows.Forms.MouseButtons.Left)
                return;

            this.mDragFlag++;

            if (this.mDragFlag == 5)
            {
                ListView.SelectedListViewItemCollection collection = this.listView2.SelectedItems;

                if (collection == null || collection.Count == 0)
                {
                    return;
                }

                List<string> files = new List<string>();

                foreach (ListViewItem item in collection)
                {
                    if (item.Tag is string)
                    {
                        files.Add(item.Tag as string);
                    }
                }

                this.listView2.DoDragDrop(files.ToArray(), DragDropEffects.Copy);
            }
        }

        private void listView2_MouseUp(object sender, MouseEventArgs e)
        {
            mDragFlag = 0;
        }
    }


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值