C#ListView詳解(三)

瞭解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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章