winform 拖拉ListView的图标切换位置
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; namespace testListViewDrag { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { string url = "tempPic\\"; DirectoryInfo dir = new DirectoryInfo(url); FileSystemInfo[] fileinfos = dir.GetFiles(); //返回目录中所有文件和子目录 foreach (var item in fileinfos) { var img = Image.FromFile(url + item); imageList1.Images.Add(img); } this.listView1.View = View.LargeIcon; this.listView1.LargeImageList = imageList1; for (int i = 0; i < imageList1.Images.Count; i++) { ListViewItem item = new ListViewItem(); item.Text = i.ToString(); item.ImageIndex = i; listView1.Items.Add(item); } } ListViewItem moveItem = null; private void listView1_ItemDrag(object sender, ItemDragEventArgs e) { ListViewItem item = (ListViewItem)e.Item as ListViewItem; moveItem = item; Cursor.Current = Cursors.SizeAll; } private void listView1_MouseUp(object sender, MouseEventArgs e) { if (moveItem == null) return; // 获得鼠标坐标 Point point = listView1.PointToClient(new Point(e.X, e.Y)); // 返回离鼠标最近的项目的索引 int index = listView1.InsertionMark.NearestIndex(point); //int index = mlistview_Image.GetItemAt(e.X, e.Y).Index; //移动项的索引 int mIndex = moveItem.Index; if (mIndex == index) return; var img = imageList1.Images[mIndex]; var changeItem = listView1.Items[mIndex]; string text = changeItem.Text; if (mIndex > index) { //从后往前移动 for (int i = mIndex; i >= index; i--) { if (i == 0) continue; imageList1.Images[i] = imageList1.Images[i - 1]; listView1.Items[i].Text = listView1.Items[i - 1].Text; } imageList1.Images[index] = img; listView1.Items[index].Text = text; } else { //从前往后 for (int i = mIndex; i < index; i++) { imageList1.Images[i] = imageList1.Images[i + 1]; listView1.Items[i].Text = listView1.Items[i + 1].Text; } imageList1.Images[index] = img; listView1.Items[index].Text = text; } this.listView1.LargeImageList = imageList1; this.listView1.Refresh(); moveItem = null; Cursor.Current = Cursors.Default; } private void listView1_MouseMove(object sender, MouseEventArgs e) { if (moveItem == null) return; Cursor.Current = Cursors.SizeAll; } } }
文章评论