У меня есть некоторый код (показанный ниже) для компьютера, на котором выполняется c # в приложении Windows Forms с использованием Microsoft Visual Studio.
Я пытаюсь осуществить переупорядочение пользователем текстового содержимого окна списка с помощью 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();
}
}
Спасибо за вашу проницательность и опыт.
Мартин