c# Winform Listview的Details模式时拖动Items排序的实现。

本部分代码参考与网络文章,部分代码转自网络,感谢提供思路的作者。

 

 

     ///   <summary>
        
///  当拖动某项时
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  listView1_ItemDrag( object  sender, ItemDragEventArgs e)
        {          
            listView1.DoDragDrop(e.Item, DragDropEffects.Move);

        }
        
///   <summary>
        
///  用鼠标拖动某项至该控件的区域时
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  listView1_DragEnter( object  sender, DragEventArgs e)
        {
            e.Effect 
=  DragDropEffects.Move;
        }

        
///   <summary>
        
///  拖动时拖着某项置于某行上方时
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  listView1_DragOver( object  sender, DragEventArgs e)
        {
            Point ptScreen 
=   new  Point(e.X, e.Y);
            Point pt 
=  listView1.PointToClient(ptScreen);
            ListViewItem item 
=  listView1.GetItemAt(pt.X, pt.Y);
            
if  (item  !=   null )
                item.Selected 
=   true ;
        }

        
///   <summary>
        
///  拖动结束
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  listView1_DragDrop( object  sender, DragEventArgs e)
        {
            ListViewItem draggedItem 
=  (ListViewItem)e.Data.GetData( typeof (ListViewItem));          
            Point ptScreen 
=   new  Point(e.X, e.Y);
            Point pt 
=  listView1.PointToClient(ptScreen);
            ListViewItem TargetItem 
=  listView1.GetItemAt(pt.X, pt.Y); // 拖动的项将放置于该项之前    
            listView1.Items.Insert(TargetItem.Index, (ListViewItem)draggedItem.Clone());           
            listView1.Items.Remove(draggedItem);
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值