了解ListView的成员和简单demo请查看详解一和详解二
Demo3:
拖放ListVIewItem实现重新排序
注意拖放的事件发生顺序(讲解一)
Code:
private void btnDemo3_Click(object sender, EventArgs e)
{
lvContainer.BeginUpdate();
lvContainer.Clear();
//如果不设置为View.List则会导致ListView.Items.Insert函数插入的ListViewItem在最后一项
lvContainer.View = View.List;
//必须设置为true
lvContainer.AllowDrop = true;
lvContainer.SmallImageList = imageListSource;
for (int i = 0; i < 10; i++)
{
ListViewItem item = new ListViewItem();
item.ImageIndex = 0;
item.Text = i.ToString();
lvContainer.Items.Add(item);
}
lvContainer.EndUpdate();
}
//开始拖放项
private void lvContainer_ItemDrag(object sender, ItemDragEventArgs e)
{
//继承Control的函数,当调用此函数后,DragDrop事件完成后,才会执行之后的代码
lvContainer.DoDragDrop(e.Item, DragDropEffects.Copy);
}
private void lvContainer_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.AllowedEffect;
}
private void lvContainer_DragDrop(object sender, DragEventArgs e)
{
int nearestItemIndex = lvContainer.InsertionMark.NearestIndex(lvContainer.PointToClient(new Point(e.X, e.Y)));
ListViewItem item = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
lvContainer.Items.Insert(nearestItemIndex, (ListViewItem)item.Clone());
lvContainer.Items.Remove(item);
}
Effect Picture:

Demo4:
两个ListView之间进行ListViewItem拖放效果
Code
//进行数据加载
private void ListItemDragDropDemo_Load(object sender, EventArgs e)
{
//设置源ListView
lvSource.LargeImageList = iList;
lvSource.View = View.LargeIcon;
lvSource.AllowDrop = true;
for (int i = 0; i < 10; i++)
{
ListViewItem item = new ListViewItem();
item.ImageIndex = 0;
item.Text = i.ToString();
lvSource.Items.Add(item);
item.Tag = (i + 10).ToString();
}
//设置目标ListView
lvDestination.LargeImageList = iList;
lvDestination.View = View.LargeIcon;
lvDestination.AllowDrop = true;
}
private void lvSource_ItemDrag(object sender, ItemDragEventArgs e)
{
lvSource.DoDragDrop(e.Item, DragDropEffects.Copy);
}
private void lvSource_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.AllowedEffect;
}
private void lvDestination_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.AllowedEffect;
}
private void lvDestination_DragDrop(object sender, DragEventArgs e)
{
ListViewItem item=(ListViewItem)e.Data.GetData(typeof(ListViewItem));
//由于不需要进行重新排序,所以进行Item增加即可,View不采用List
lvDestination.Items.Add((ListViewItem)item.Clone());
lvSource.Items.Remove(item);
}
Effect Pictrue
