首页 > 解决方案 > 为什么我的代码只允许我在列表视图框中拖放最上面的重复项

问题描述

我有一些代码(如下所示),用于使用 Microsoft Visual Studio 在 Windows 窗体应用程序中运行 c# 的 PC。

我正在尝试使用 DragDrop 和 MouseDown 指令实现用户对列表视图窗口文本内容的重新排序。

我遇到的问题是,当我尝试重新排序在同一列表视图窗口中具有完全重复(或重复)的项目时,无论我单击哪个以拖动以移动到同一列表中的新位置,被移动的总是最上面的。

因此,例如,我可以在列表的最底部有一个副本,在列表的最顶部有一个副本,如果我单击并拖动底部的副本并放在顶部附近,它总是移动的顶部副本而不是我实际上拖到了底部。因此,顶部的似乎总是优先。

private void Playlist_MouseDown(object sender, MouseEventArgs e)
        {
            int item_index_pickup = Playlist.IndexFromPoint(e.X, e.Y);

            if (item_index_pickup >= 0 && item_index_pickup < 
            Playlist.Items.Count)

            {
                Playlist.DoDragDrop(Playlist.SelectedItem, 
                DragDropEffects.Move);

                playlist_reorder = true;
            }
        }

private void Playlist_DragDrop(object sender, DragEventArgs e)
        {
            int item_index_drop = Playlist.IndexFromPoint(
            Playlist.PointToClient(new Point(e.X, e.Y)));

            Playlist.Items.Remove(Playlist.SelectedItem);

            if (item_index_drop >= 0 && item_index_drop < 
            Playlist.Items.Count)
            // Check whether item is inserted or added to end of list

            {
                Playlist.Items.Insert(item_index_drop, 
                e.Data.GetData(DataFormats.Text));

                Playlist.ClearSelected();
            }

            else // Add item to the end of the list

            {
                string chosen_file = (string)e.Data.GetData
                (DataFormats.StringFormat);

                Playlist.Items.Add(chosen_file);

                Playlist.ClearSelected();
            }

        }

感谢您的洞察力和经验。

马丁

标签: c#winformslistview

解决方案


推荐阅读