Перетаскивание между списками просмотра с группами - PullRequest
0 голосов
/ 23 сентября 2019

Я итальянец, поэтому прошу прощения за мой английский.Я работаю с VS2008 PRO (VB.NET), Net Framework 3.5 SP1, на Win7 или Win10.У меня следующая проблема:

Я хочу перетаскивать элементы между двумя различными списками.В источнике нет групп, у цели есть группы.

При загрузке формы я заполняю целевой список просмотра группами, но без элементов.Чтобы увидеть группы, я добавляю в каждую группу «фиктивный элемент» с Text = String.Empty.Этот способ показывает мне группы и не показывает элементы (см. Рисунок)

On Form Load

Также я обнаружил, что каждый первый элемент в группе имеет индекс= 0 второй 1 и т. Д., Так что индекс не уникален.

Когда я перетаскиваю элемент из источника в цель, мне нужно определить целевую группу;пользователь может отпустить указатель мыши над областью между существующими группами и не всегда над существующим элементом);в другом вопросе я нашел следующий код:

    ' Retrieve the client coordinates of the mouse pointer.
    Dim targetPoint As Point = TargetList.PointToClient(New Point(e.X, e.Y))
    ' Retrieve the index of the item closest to the mouse pointer.
    Dim targetIndex As Integer = TargetList.InsertionMark.NearestIndex(targetPoint)

С кодом выше я получаю ближайший индекс к точке, в которой пользователь отпустил мышь, но я всегда получаю элемент с индексом = 0 (без информации огруппа);этот способ мне не подходит

    Dim htInfo As ListViewHitTestInfo = TargetList.HitTest(TargetList.PointToClient(New Point(e.X, e.Y)))
    Dim lviSibling As ListViewItem = htInfo.Item

Приведенный выше код работает, только если мышь отпущена над существующим элементом;если нет (и у меня есть это условие, когда Item существует, но не отображается), htInfo.Item равен Nothing, и я не могу получить связанную группу.

Возможное решение - показать фиктивный элемент с текстом "[Dropздесь новый элемент] ", чтобы заставить пользователя отпустить мышь над существующим элементом, но я хотел бы найти лучший способ (если есть)

Любое предложение будет высоко оценено.Спасибо Стефано

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