c# - 为什么我的代码只允许我在列表视图框中拖放最上面的重复项
问题描述
我有一些代码(如下所示),用于使用 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();
}
}
感谢您的洞察力和经验。
马丁
解决方案
推荐阅读
- typescript - 是否可以在库中显式导入全局类型(如“dom”)?
- r - 在R中满足条件时如何重新运行更改变量的函数?
- java - 如何从静态函数返回函数接口?
- python - 为什么我的 gpu 没有在 torch 中使用?
- python - 在 Jupitor Notebook 中安装 shap 时出错
- java - 如何使用 mongostat 一整天在 Mongo 数据库上获取创建/插入/删除/更新的总数?
- javascript - 调度外部组件
- jquery - 根据 c# linq 输出分组
- python - 处理 ZeroDivisionError:当我无法丢弃 0 时进行浮点除法
- visual-studio - 通过任务在 csproj 中自动设置程序集版本