拖拽相关来源推荐: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;
}
}