先建立好ListView,ImageList,
然后编写一个比较类
在就是添加DragDrop事件了
具体实现看代码吧

    1. public partial class Form1 : Form
    2. {
    3. public Form1()
    4. {
    5. InitializeComponent();
    6. InitializeListView();
    7. }
    8. // 初始化listView1.
    9. private void InitializeListView()
    10. {
    11. listView1.ListViewItemSorter = new ListViewIndexComparer();
    12. //初始化插入标记
    13. listView1.InsertionMark.Color = Color.Red;
    14. //
    15. listView1.AllowDrop = true;
    16. }
    17. // 当一个项目拖拽是启动拖拽操作
    18. private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
    19. {
    20. listView1.DoDragDrop(e.Item, DragDropEffects.Move);
    21. }
    22. private void listView1_DragEnter(object sender, DragEventArgs e)
    23. {
    24. e.Effect = e.AllowedEffect;
    25. }
    26. //像拖拽项目一样移动插入标记
    27. private void listView1_DragOver(object sender, DragEventArgs e)
    28. {
    29. // 获得鼠标坐标
    30. Point point = listView1.PointToClient(new Point(e.X, e.Y));
    31. // 返回离鼠标最近的项目的索引
    32. int index = listView1.InsertionMark.NearestIndex(point);
    33. // 确定光标不在拖拽项目上
    34. if (index > -1)
    35. {
    36. Rectangle itemBounds = listView1.GetItemRect(index);
    37. if (point.X > itemBounds.Left + (itemBounds.Width / 2))
    38. {
    39. listView1.InsertionMark.AppearsAfterItem = true;
    40. }
    41. else
    42. {
    43. listView1.InsertionMark.AppearsAfterItem = false;
    44. }
    45. }
    46. listView1.InsertionMark.Index = index;
    47. }
    48. // 当鼠标离开控件时移除插入标记
    49. private void listView1_DragLeave(object sender, EventArgs e)
    50. {
    51. listView1.InsertionMark.Index = -1;
    52. }
    53. // 将项目移到插入标记所在的位置
    54. private void listView1_DragDrop(object sender, DragEventArgs e)
    55. {
    56. // 返回插入标记的索引值
    57. int index = listView1.InsertionMark.Index;
    58. // 如果插入标记不可见,则退出.
    59. if (index == -1)
    60. {
    61. return;
    62. }
    63. // 如果插入标记在项目的右面,使目标索引值加一
    64. if (listView1.InsertionMark.AppearsAfterItem)
    65. {
    66. index++;
    67. }
    68. // 返回拖拽项
    69. ListViewItem item = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
    70. //在目标索引位置插入一个拖拽项目的副本
    71. listView1.Items.Insert(index, (ListViewItem)item.Clone());
    72. // 移除拖拽项目的原文件
    73. listView1.Items.Remove(item);
    74. }
    75. // 对ListView里的各项根据索引进行排序
    76. private class ListViewIndexComparer : System.Collections.IComparer
    77. {
    78. public int Compare(object x, object y)
    79. {
    80. return ((ListViewItem)x).Index - ((ListViewItem)y).Index;
    81. }
    82. }
    83. }  
      1. http://blog.csdn.net/lilongherolilong/article/details/6689109

C# ListView添加DragDrop的更多相关文章

  1. 仿喜马拉雅实现ListView添加头布局和脚布局

     ListView添加头布局和脚布局 之前学习喜马拉雅的时候做的一个小Demo,贴出来,供大家学习参考: 如果我们当前的页面有多个接口.多种布局的话,我们一般的选择无非就是1.多布局:2.各种复杂滑动 ...

  2. ListView添加项目带序列

    ListView添加项目带序列     function AddSelItems(listview1:TListView;ListView2:TListView):Boolean;var  s: st ...

  3. 为ListView添加头和脚

      转自:https://software.intel.com/zh-cn/blogs/2014/12/15/android-listview-addheaderview-addfooterview ...

  4. 自定义listView添加滑动删除功能

    今天研究了一下android里面的手势,结合昨天学习的自定义View,做了一个自定义的listview,继承自listView,添加了条目的滑动手势操作,滑动后出现一个删除按钮,点击删除按钮,触发一个 ...

  5. Android之listview添加数据篇

    一.ListView: 1. ListView通常有两个职责: 1.向布局填充数据 2.处理选择点击等操作 2.ListView的创建需要3个元素: 1. ListView中的每一列的View. 2. ...

  6. Android在listview添加checkbox实现单选多选操作问题(转)

    转自:http://yangshen998.iteye.com/blog/1310183 在Android某些开发需求当中,有时候需要在listveiw中加入checkbox实现单选,多选操作.表面上 ...

  7. 【WinForm】线程中向listview添加数据

    在使用listview的时候,因为处理的数据较多,为防止在处理数据时出现假死的状态出现卡的情况,我们使用委托进行处理添加数据 定义委托 private delegate void AddListVie ...

  8. Android在listview添加checkbox实现单选多选操作问题

    android根据View的不同状态更换不同的背景http://www.eoeandroid.com/thread-198029-1-1.html android 模仿朋友网推出的菜单效果[改进版]h ...

  9. ListView添加图片文字项

    1)listview 控件 结合 imagelist 控件 实现类似效果. 2)添加 imagelist 控件 images 属性,点击后面的... 添加相应图片. 3)点listview,查看其属性 ...

随机推荐

  1. 使用IDEA自动生成Java实体类

    在上一篇帖子里,我们已经通过idea连接上了数据库,这里,通过IDEA自带的功能来根据数据库字段生成POJO 1. 选中一张表,右键--->Scripted Extensions--->选 ...

  2. Gparted for partition of Linux on graphic interface

    You can change the partition table on Linux by a group of tools, which is tool comprehansive for a n ...

  3. 超大文件上传方案(ASP.NET)

    ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...

  4. 【bzoj3277&&3474】串

    *题目描述: 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串(注意包括本身). *输入: 第一行两个整数n,k.接下来n行 ...

  5. BP算法演示

    本文转载自https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/ Background Backpropaga ...

  6. sh_05_超市买苹果

    sh_05_超市买苹果 # 1. 定义苹果的单价 price = 8.5 # 2. 挑选苹果 weight = 7.5 # 3. 计算付款金额 money = weight * price # 4. ...

  7. Python List 列表list()方法

    Python基础数据类型之一列表list,在python中作用很强在,列表List可以包含不同类型的数据对像,同时它是一个有序的变量集合,每个变量可以存储一个地址.所有序列能用到的标准操作方法,列表也 ...

  8. 图像bayer格式介绍【转】

    本文转载自:http://www.cnblogs.com/whw19818/p/6223143.html 1 图像bayer格式介绍 bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer发 ...

  9. 使用自定义的tstring.h

    UNICODE   控制函数是否用宽字符版本_UNICODE 控制字符串是否用宽字符集 _T("") 根据上述定义来解释字符集 // 在tchar.h中 // tstring.h ...

  10. int 和 字节 相互转换

    In [10]: n = 0xf1f2 In [11]: bin(n) Out[11]: '0b1111000111110010' In [12]: n.bit_length() Out[12]: 1 ...