Почему мой код позволяет только перетаскивать самый верхний дубликат элемента в поле списка - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть некоторый код (показанный ниже) для компьютера, на котором выполняется 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();
            }

        }

Спасибо за вашу проницательность и опыт.

Мартин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...