【问题标题】:C# ListView DragDrop Reordering not workingC# ListView DragDrop 重新排序不起作用
【发布时间】:2014-03-02 21:43:07
【问题描述】:

我正在尝试实现ListViewItemsDragDrop 来重新排序我的列表。

列表不会像我预期的那样重新排序或移动项目。

代码

    private void lstModules_DragDrop(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(typeof(ListViewItem)))
        {
            lstModules.Alignment = ListViewAlignment.Default;
            if (lstModules.SelectedItems.Count == 0)
                return;

            var p = lstModules.PointToClient(new System.Drawing.Point(e.X, e.Y));

            ListViewItem MovetoNewPosition = lstModules.GetItemAt(p.X, p.Y);

            if (MovetoNewPosition == null) 
                return;

            ListViewItem DropToNewPosition = (e.Data.GetData(typeof(ListView.SelectedListViewItemCollection)) as ListView.SelectedListViewItemCollection)[0];
            ListViewItem CloneToNew = (ListViewItem)DropToNewPosition.Clone();

            int index = MovetoNewPosition.Index;
            lstModules.Items.Remove(DropToNewPosition);
            lstModules.Items.Insert(index, CloneToNew);

            lstModules.Alignment = ListViewAlignment.SnapToGrid;


        }

    }


    private void lstModules_DragEnter(object sender, DragEventArgs e)
    {

        if (e.Data.GetDataPresent(typeof(ListView.SelectedListViewItemCollection)))
        {
            e.Effect = DragDropEffects.Move;
        }

    }


    private void lstModules_ItemDrag(object sender, ItemDragEventArgs e)
    {
        lstModules.DoDragDrop(lstModules.SelectedItems, DragDropEffects.Move);
    }

【问题讨论】:

    标签: c# winforms listview drag-and-drop


    【解决方案1】:

    最近我做了这个代码试试这个。

    private ListViewItem tempItem = null;
    private void lvTables_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            Application.DoEvents();
            tempItem = lvTables.GetItemAt(e.X, e.Y);
            string sData = tempItem.Text + ":" + tempItem.Name;
            DragDropEffects effect = DoDragDrop(sData, DragDropEffects.Move);
            lvTables.Refresh();
        }       
    }
    
    private void lvTables_DragEnter(object sender, DragEventArgs e)
    {
    
        if (e.Data.GetDataPresent(DataFormats.StringFormat))
            e.Effect = DragDropEffects.Move;
        else
            e.Effect = DragDropEffects.None;
    }
    
    private void lvTables_DragOver(object sender, DragEventArgs e)
    {
        if (tempItem != null && lvTables.Items.Contains(tempItem))
        {
            Application.DoEvents();
            int iIndex = -1;
            try
            {
                Point p = lvTables.PointToClient(new Point(e.X, e.Y));
                iIndex = lvTables.GetItemAt(p.X, p.Y).Index;
            }
            catch
            { }
            if (iIndex > -1 && iIndex != tempItem.Index)
            {
                if (lvTables.Items.Contains(tempItem))
                    lvTables.Items.Remove(tempItem);
                lvTables.Items.Insert(iIndex, tempItem);
                tempItem.Selected = true;
            }
        }
    }
    
    private void lvTables_MouseUp(object sender, MouseEventArgs e)
    {
        if (tempItem != null)
        {
            lvTables.SelectedItems.Clear();
            tempItem.Selected = true;
            tempItem = null;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2016-06-22
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      相关资源
      最近更新 更多