找回密码
 立即注册

QQ登录

只需一步,快速开始

iceman
社区贡献组   /  发表于:2015-8-6 17:06:00
沙发
回复 1楼leadcom的帖子

请参考附件Demo:


效果图:



关键代码:


  1. private void imageList_MouseDown(object sender, MouseEventArgs e)
  2.         {
  3.             try
  4.             {
  5.                 if (imageList.HitTest(e.X, e.Y) != null)
  6.                 {
  7.                     bMouseDown = true;
  8.                 }
  9.             }
  10.             catch (Exception ex)
  11.             {
  12.                 MessageBox.Show(ex.ToString());
  13.             }
  14.             base.OnMouseDown(e);
  15.         }

  16.         private void imageList_MouseUp(object sender, MouseEventArgs e)
  17.         {
  18.             if (bDragging)
  19.             {
  20.                 try
  21.                 {
  22.                     RasterImageListItem HitTestListItem = imageList.HitTest(e.X, e.Y);
  23.                     if (HitTestListItem != null)
  24.                     {
  25.                         Rectangle itemRect = imageList.GetItemRectangle(HitTestListItem);
  26.                         int insertIndex = imageList.Items.IndexOf(HitTestListItem);
  27.                         if (e.X > (itemRect.Left + itemRect.Width / 2))
  28.                         {
  29.                             insertIndex++;
  30.                         }

  31.                         // 禁掉一些事件
  32.                         imageList.BeginUpdate();

  33.                         // 创建三个Item用来保存拖拽前后的项目
  34.                         RasterImageListItemCollection NonSelectedItemsBefore = new RasterImageListItemCollection(null);
  35.                         RasterImageListItemCollection SelectedItems = new RasterImageListItemCollection(null);
  36.                         RasterImageListItemCollection NonSelectedItemsAfter = new RasterImageListItemCollection(null);
  37.                         int counter = 0;
  38.                         RasterImageListItem[] tempItems = new RasterImageListItem[imageList.Items.Count];
  39.                         imageList.AutoDisposeImages = false;
  40.                         while (imageList.Items.Count > 0)
  41.                         {
  42.                             if (imageList.Items[0].Selected)
  43.                             {
  44.                                 SelectedItems.Add(imageList.Items[0]);
  45.                             }
  46.                             else
  47.                             {
  48.                                 if (counter < insertIndex)
  49.                                     NonSelectedItemsBefore.Add(imageList.Items[0]);
  50.                                 else
  51.                                     NonSelectedItemsAfter.Add(imageList.Items[0]);
  52.                             }
  53.                             imageList.Items.RemoveAt(0);
  54.                             counter++;
  55.                         }

  56.                         // 重新添加
  57.                         imageList.Items.AddRange(NonSelectedItemsBefore);
  58.                         imageList.Items.AddRange(SelectedItems);
  59.                         imageList.Items.AddRange(NonSelectedItemsAfter);


  60.                         // 绘制
  61.                         imageList.AutoDisposeImages = true;
  62.                         imageList.EndUpdate();
  63.                     }
  64.                 }
  65.                 catch (Exception ex)
  66.                 {
  67.                     MessageBox.Show(ex.ToString());
  68.                 }
  69.             }
  70.             bDragging = false;
  71.             bMouseDown = false;
  72.             base.OnMouseUp(e);
  73.         }

  74.         private void imageList_MouseMove(object sender, MouseEventArgs e)
  75.         {
  76.             if (bMouseDown)
  77.             {
  78.                 bDragging = true;
  79.             }
  80.             base.OnMouseMove(e);
  81.         }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部