瞭解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:
![這裏寫圖片描述](https://img-blog.csdn.net/20170723080724205?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ194dWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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
![這裏寫圖片描述](https://img-blog.csdn.net/20170723081617782?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ194dWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)