Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#ListView DragDrop重新排序不起作用_C#_Winforms_Listview_Drag And Drop - Fatal编程技术网

C#ListView DragDrop重新排序不起作用

C#ListView DragDrop重新排序不起作用,c#,winforms,listview,drag-and-drop,C#,Winforms,Listview,Drag And Drop,我正在尝试实现一个ListViewItems的DragDrop,以重新排列我的列表 该列表不会像我预期的那样重新排序或移动项目 代码 private void lstModules_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(ListViewItem))) { lstModules.Alignment = ListVi

我正在尝试实现一个
ListViewItems
DragDrop
,以重新排列我的列表

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

代码

    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);
    }

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

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;
    }
}