在winform的listbox中进行拖动排序

时间:2022-11-09 15:51:17

下面是一个我自己写的在listbox中通过拖动进行排序的代码,希望对初学者有点儿用(其实我也是初学者),呵呵,不多说了,直接贴代码了,都有说明的,稍微看下就明白了

在以下内容中lstChildMenu我的ListBox的name

AppGIMenusMod是我自己定义的一个模型 有ID和MenuName属性,这个模型大家可以自己随便定义

indexofsource和indexoftarget是自定义的int型 的全局变量

 

ListBox中的DragDrop事件代码:

  private void lstChildMenu_DragDrop(object sender, DragEventArgs e)
  {
            ListBox listbox = (ListBox)sender;
            indexoftarget = listbox.IndexFromPoint(listbox.PointToClient(new Point(e.X, e.Y)));
            if (indexoftarget != ListBox.NoMatches)
            {
                object obj = listbox.Items[indexofsource];
                List<AppGIMenusMod> lstMenus = (List<AppGIMenusMod>)listbox.DataSource;
                AppGIMenusMod modMenu = new AppGIMenusMod();
                modMenu = lstMenus[indexofsource];

                lstMenus.RemoveAt(indexofsource);//从数据源中移除当前拖动项
                lstMenus.Insert(indexoftarget, modMenu);//拖动项重新插入到数据源指定位置

                lstChildMenu.DataSource = null;//这句一定要写,我不知道是什么原因,我一直以为winform中数据源回自动更新,可是如果我不释放一下数据源就算排好序,Listbox中也不会显示


                lstChildMenu.DisplayMember = "MenuName";
                lstChildMenu.ValueMember = "ID";
                lstChildMenu.DataSource = lstMenus;//重新设置数据源

                lstChildMenu.SelectedIndex = indexoftarget;

            }
 }

ListBox中的DragOver事件代码:

 private void lstChildMenu_DragOver(object sender, DragEventArgs e)
 {
            //拖动源和放置的目的地一定是一个ListBox
            if (e.Data.GetDataPresent(typeof(System.String)) && ((ListBox)sender).Equals(lstChildMenu))
            {
                e.Effect = DragDropEffects.Move;
            }
            else
                e.Effect = DragDropEffects.None;

 }

ListBox中的MouseDown事件代码:

private void lstChildMenu_MouseDown(object sender, MouseEventArgs e)
{
            indexofsource = ((ListBox)sender).IndexFromPoint(e.X, e.Y);

            if (indexofsource != ListBox.NoMatches)
            {
                ((ListBox)sender).DoDragDrop(((ListBox)sender).Items[indexofsource].ToString(), DragDropEffects.Move);
            }

}

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Missna/archive/2010/04/30/5546223.aspx